summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/bcachefs/journal_reclaim.c5
-rw-r--r--fs/bcachefs/recovery.c1
2 files changed, 6 insertions, 0 deletions
diff --git a/fs/bcachefs/journal_reclaim.c b/fs/bcachefs/journal_reclaim.c
index 2fa87c7dab7a..66f5dcce8889 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);
diff --git a/fs/bcachefs/recovery.c b/fs/bcachefs/recovery.c
index 6750063663b5..0b3521c9cc19 100644
--- a/fs/bcachefs/recovery.c
+++ b/fs/bcachefs/recovery.c
@@ -616,6 +616,7 @@ static int bch2_journal_replay(struct bch_fs *c,
*/
set_bit(BCH_FS_BTREE_INTERIOR_REPLAY_DONE, &c->flags);
set_bit(JOURNAL_RECLAIM_STARTED, &j->flags);
+ journal_reclaim_kick(j);
j->replay_journal_seq = seq;