bcachefs: Don't do extent merging before journal replay is finished
authorKent Overstreet <kent.overstreet@linux.dev>
Sat, 23 Mar 2024 23:29:55 +0000 (19:29 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Mon, 1 Apr 2024 00:36:11 +0000 (20:36 -0400)
We don't normally do extent updates this early in recovery, but some of
the repair paths have to and when we do, we don't want to do anything
that requires the snapshots table.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_update.c

index a4b40c1656a54b0a13c9f562d337827387a44b15..8e47e260eba59b09097fd07b1d9063a0e665a812 100644 (file)
@@ -38,6 +38,9 @@ static noinline int extent_front_merge(struct btree_trans *trans,
        struct bkey_i *update;
        int ret;
 
+       if (unlikely(trans->journal_replay_not_finished))
+               return 0;
+
        update = bch2_bkey_make_mut_noupdate(trans, k);
        ret = PTR_ERR_OR_ZERO(update);
        if (ret)
@@ -69,6 +72,9 @@ static noinline int extent_back_merge(struct btree_trans *trans,
        struct bch_fs *c = trans->c;
        int ret;
 
+       if (unlikely(trans->journal_replay_not_finished))
+               return 0;
+
        ret =   bch2_key_has_snapshot_overwrites(trans, iter->btree_id, insert->k.p) ?:
                bch2_key_has_snapshot_overwrites(trans, iter->btree_id, k.k->p);
        if (ret < 0)