Commit 718ce1eb authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet

bcachefs: Skip periodic wakeup of journal reclaim when journal empty

Less system noise.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
parent f0cc5d29
......@@ -240,6 +240,9 @@ static int journal_entry_open(struct journal *j)
if (u64s <= 0)
return cur_entry_journal_full;
if (fifo_empty(&j->pin) && j->reclaim_thread)
wake_up_process(j->reclaim_thread);
/*
* The fifo_push() needs to happen at the same time as j->seq is
* incremented for journal_last_seq() to be calculated correctly
......
......@@ -667,6 +667,7 @@ static int bch2_journal_reclaim_thread(void *arg)
struct journal *j = arg;
struct bch_fs *c = container_of(j, struct bch_fs, journal);
unsigned long delay, now;
bool journal_empty;
int ret = 0;
set_freezable();
......@@ -693,10 +694,17 @@ static int bch2_journal_reclaim_thread(void *arg)
break;
if (j->reclaim_kicked)
break;
if (time_after_eq(jiffies, j->next_reclaim))
break;
schedule_timeout(j->next_reclaim - jiffies);
spin_lock(&j->lock);
journal_empty = fifo_empty(&j->pin);
spin_unlock(&j->lock);
if (journal_empty)
schedule();
else if (time_after(j->next_reclaim, jiffies))
schedule_timeout(j->next_reclaim - jiffies);
else
break;
}
__set_current_state(TASK_RUNNING);
}
......
......@@ -243,6 +243,10 @@ struct journal {
spinlock_t err_lock;
struct mutex reclaim_lock;
/*
* Used for waiting until journal reclaim has freed up space in the
* journal:
*/
wait_queue_head_t reclaim_wait;
struct task_struct *reclaim_thread;
bool reclaim_kicked;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment