bcachefs: Add missing bch2_btree_node_iter_fix() call
authorKent Overstreet <kent.overstreet@gmail.com>
Thu, 19 Sep 2019 20:01:32 +0000 (16:01 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:27 +0000 (17:08 -0400)
Any time we're modifying what's in the btree, iterators potentially have
to be updated - this one was exposed by the reflink code.

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

index 007d772d6e8ff566eb00ed67da7b200a17feea82..d97d80859d1b12fd8e18b8c0cf6de8c3e1302590 100644 (file)
@@ -183,9 +183,8 @@ bool bch2_btree_bset_insert_key(struct btree_iter *iter,
        clobber_u64s = 0;
 overwrite:
        bch2_bset_insert(b, node_iter, k, insert, clobber_u64s);
-       if (k->u64s != clobber_u64s || bkey_whiteout(&insert->k))
-               bch2_btree_node_iter_fix(iter, b, node_iter, k,
-                                        clobber_u64s, k->u64s);
+       bch2_btree_node_iter_fix(iter, b, node_iter, k,
+                                clobber_u64s, k->u64s);
        bch2_btree_iter_verify(iter, b);
        return true;
 }
index d7ce87bd43747e8ba3c63bd094b128a3e2e4a239..00d77ed01234d23300f5c016d676a627803b6404 100644 (file)
@@ -1270,6 +1270,8 @@ static void __bch2_insert_fixup_extent(struct bch_fs *c,
                                btree_account_key_drop(l->b, _k);
                                _k->type = KEY_TYPE_discard;
                                reserve_whiteout(l->b, _k);
+                               bch2_btree_node_iter_fix(iter, l->b, &l->iter,
+                                                       _k, _k->u64s, _k->u64s);
                        }
                        break;
                }