diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2022-03-07 01:20:39 +0300 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-23 00:09:27 +0300 |
commit | 718ce1eb8a84f47f66d0c89de43c6d0f0b14a20e (patch) | |
tree | 01e7614265a3298cf11bfd2203d94912febab80a /fs/bcachefs/journal_reclaim.c | |
parent | f0cc5d2931378b7a2a7e797c726a2ab760d4a84d (diff) | |
download | linux-718ce1eb8a84f47f66d0c89de43c6d0f0b14a20e.tar.xz |
bcachefs: Skip periodic wakeup of journal reclaim when journal empty
Less system noise.
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Diffstat (limited to 'fs/bcachefs/journal_reclaim.c')
-rw-r--r-- | fs/bcachefs/journal_reclaim.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/fs/bcachefs/journal_reclaim.c b/fs/bcachefs/journal_reclaim.c index 39f4b2eebac0..56b0c018ac26 100644 --- a/fs/bcachefs/journal_reclaim.c +++ b/fs/bcachefs/journal_reclaim.c @@ -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); } |