]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: Don't trigger extra assertions in journal replay
authorKent Overstreet <kent.overstreet@gmail.com>
Sun, 10 Apr 2022 04:48:36 +0000 (00:48 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:31 +0000 (17:09 -0400)
We now pass a rw argument to .key_invalid methods so they can trigger
assertions for updates but not on existing keys. We shouldn't trigger
these extra assertions in journal replay - this patch changes the
transaction commit path accordingly.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
fs/bcachefs/btree_io.c
fs/bcachefs/btree_update_leaf.c

index ba1d775039a3f80420499d872d05d0d85c986474..f847928ab743b3d95851d597aa61ac031c8aa7fe 100644 (file)
@@ -767,9 +767,9 @@ static int bset_key_invalid(struct bch_fs *c, struct btree *b,
                            bool updated_range, int rw,
                            struct printbuf *err)
 {
-       return __bch2_bkey_invalid(c, k, btree_node_type(b), rw, err) ?:
+       return __bch2_bkey_invalid(c, k, btree_node_type(b), READ, err) ?:
                (!updated_range ? bch2_bkey_in_btree_node(b, k, err) : 0) ?:
-               (rw == WRITE ? bch2_bkey_val_invalid(c, k, rw, err) : 0);
+               (rw == WRITE ? bch2_bkey_val_invalid(c, k, READ, err) : 0);
 }
 
 static int validate_bset_keys(struct bch_fs *c, struct btree *b,
index 449fbae585cb94374a43b73b2580eeb1643b0042..bc7faf29b3bc26efe2b8c9a89757f0d18077b2c4 100644 (file)
@@ -864,10 +864,11 @@ static inline int do_bch2_trans_commit(struct btree_trans *trans,
        struct btree_insert_entry *i;
        struct printbuf buf = PRINTBUF;
        int ret, u64s_delta = 0;
+       int rw = (trans->flags & BTREE_INSERT_JOURNAL_REPLAY) ? READ : WRITE;
 
        trans_for_each_update(trans, i) {
                if (bch2_bkey_invalid(c, bkey_i_to_s_c(i->k),
-                                     i->bkey_type, WRITE, &buf)) {
+                                     i->bkey_type, rw, &buf)) {
                        printbuf_reset(&buf);
                        pr_buf(&buf, "invalid bkey on insert from %s -> %ps",
                               trans->fn, (void *) i->ip_allocated);
@@ -878,7 +879,7 @@ static inline int do_bch2_trans_commit(struct btree_trans *trans,
                        pr_newline(&buf);
 
                        bch2_bkey_invalid(c, bkey_i_to_s_c(i->k),
-                                         i->bkey_type, WRITE, &buf);
+                                         i->bkey_type, rw, &buf);
 
                        bch2_trans_inconsistent(trans, "%s", buf.buf);
                        printbuf_exit(&buf);