summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2022-04-12 01:31:33 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2022-04-17 15:44:31 -0400
commit34fea3b76eec6a1e2c5bee2647c408c031142995 (patch)
treeeba56b23c4b48d7bcd3fc96847bc34e034825f7b
parent787f6b3e1272ae390e87359cd9cbcfe99c15fc10 (diff)
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 <kent.overstreet@gmail.com>
-rw-r--r--fs/bcachefs/recovery.c6
1 files 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|