summaryrefslogtreecommitdiff
path: root/fs/bcachefs/journal_reclaim.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2020-11-29 17:09:13 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-22 17:08:48 -0400
commit5731cf01567da4f354bbff4a040b53f3f86328ad (patch)
tree4474111d39220748c197603f460281f0c548f8e9 /fs/bcachefs/journal_reclaim.c
parent89931472c20bee93c6bcb0df7b057edda6473381 (diff)
downloadlwn-5731cf01567da4f354bbff4a040b53f3f86328ad.tar.gz
lwn-5731cf01567da4f354bbff4a040b53f3f86328ad.zip
bcachefs: Fix journal reclaim spinning in recovery
We can't run journal reclaim until we've finished replaying updates to interior btree nodes - the check for this was in the wrong place though, leading to journal reclaim spinning before it was allowed to proceed. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/journal_reclaim.c')
-rw-r--r--fs/bcachefs/journal_reclaim.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/fs/bcachefs/journal_reclaim.c b/fs/bcachefs/journal_reclaim.c
index 9f0d2e6aa4e3..c20f6de34730 100644
--- a/fs/bcachefs/journal_reclaim.c
+++ b/fs/bcachefs/journal_reclaim.c
@@ -609,6 +609,10 @@ static int bch2_journal_reclaim_thread(void *arg)
struct journal *j = arg;
unsigned long next;
+ set_freezable();
+
+ kthread_wait_freezable(test_bit(JOURNAL_RECLAIM_STARTED, &j->flags));
+
while (!kthread_should_stop()) {
j->reclaim_kicked = false;
@@ -627,6 +631,7 @@ static int bch2_journal_reclaim_thread(void *arg)
if (time_after_eq(jiffies, next))
break;
schedule_timeout(next - jiffies);
+ try_to_freeze();
}
__set_current_state(TASK_RUNNING);