bcachefs: Add missing bch2_btree_node_iter_fix() calls
authorKent Overstreet <kent.overstreet@gmail.com>
Sat, 14 Sep 2019 14:45:46 +0000 (10:45 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:27 +0000 (17:08 -0400)
With multiple iterators, if another iterator points to the key being
modified, we need to call bch2_btree_node_iter_fix() to re-unpack the
key into the iter->k

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

index 1d400808d8424769e6f4e08904b25a0bc0648754..2cf97df6b85bebbcbac48e13cfc0ba1fd6bafe66 100644 (file)
@@ -1138,6 +1138,8 @@ extent_squash(struct bch_fs *c, struct btree_iter *iter,
                __bch2_cut_front(insert->k.p, k);
                BUG_ON(bkey_deleted(k.k));
                extent_save(l->b, _k, k.k);
+               bch2_btree_node_iter_fix(iter, l->b, &l->iter,
+                                        _k, _k->u64s, _k->u64s);
                verify_modified_extent(iter, _k);
                break;
 
@@ -1207,6 +1209,8 @@ extent_squash(struct bch_fs *c, struct btree_iter *iter,
                __bch2_cut_front(insert->k.p, k);
                BUG_ON(bkey_deleted(k.k));
                extent_save(l->b, _k, k.k);
+               bch2_btree_node_iter_fix(iter, l->b, &l->iter,
+                                        _k, _k->u64s, _k->u64s);
                verify_modified_extent(iter, _k);
 
                extent_bset_insert(c, iter, &split.k);