From 34fea3b76eec6a1e2c5bee2647c408c031142995 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Tue, 12 Apr 2022 01:31:33 -0400 Subject: bcachefs: Fix for getting stuck in journal replay In journal replay, we weren't immediately dropping journal pins when we start doing updates that ewern't from journal replay - leading to journal reclaim getting stuck. Signed-off-by: Kent Overstreet --- fs/bcachefs/recovery.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/bcachefs/recovery.c b/fs/bcachefs/recovery.c index 80acbc7d3efa..a9b4ad177051 100644 --- a/fs/bcachefs/recovery.c +++ b/fs/bcachefs/recovery.c @@ -556,7 +556,8 @@ static int journal_keys_sort(struct bch_fs *c) static void replay_now_at(struct journal *j, u64 seq) { BUG_ON(seq < j->replay_journal_seq); - BUG_ON(seq > j->replay_journal_seq_end); + + seq = min(seq, j->replay_journal_seq_end); while (j->replay_journal_seq < seq) bch2_journal_pin_put(j, j->replay_journal_seq++); @@ -629,8 +630,7 @@ static int bch2_journal_replay(struct bch_fs *c) cond_resched(); - if (!k->allocated) - replay_now_at(j, keys->journal_seq_base + k->journal_seq); + replay_now_at(j, keys->journal_seq_base + k->journal_seq); ret = bch2_trans_do(c, NULL, NULL, BTREE_INSERT_LAZY_RW| -- cgit v1.2.3