bcachefs: add missing bch2_btree_iter_node_drop() call
authorKent Overstreet <kent.overstreet@gmail.com>
Fri, 29 Mar 2019 18:42:34 +0000 (14:42 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:19 +0000 (17:08 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_iter.c
fs/bcachefs/btree_update_interior.c

index bc9d8444e2209ba9db190f94e0e85e6e85f54b43..bb898911bdc6dac442e386d578b826f54bf3eda2 100644 (file)
@@ -819,14 +819,6 @@ void bch2_btree_iter_node_drop(struct btree_iter *iter, struct btree *b)
        struct btree_iter *linked;
        unsigned level = b->level;
 
-       /* caller now responsible for unlocking @b */
-
-       BUG_ON(iter->l[level].b != b);
-       BUG_ON(!btree_node_intent_locked(iter, level));
-
-       iter->l[level].b = BTREE_ITER_NOT_END;
-       mark_btree_node_unlocked(iter, level);
-
        trans_for_each_iter(iter->trans, linked)
                if (linked->l[level].b == b) {
                        __btree_node_unlock(linked, level);
index 6e9a87c6b1be99dc98c7705333a9d0b0a6af735a..4931089e2c6d18b59f220d48c28abe3b498f9f97 100644 (file)
@@ -1429,6 +1429,7 @@ static void btree_split(struct btree_update *as, struct btree *b,
 
        /* Successful split, update the iterator to point to the new nodes: */
 
+       six_lock_increment(&b->lock, SIX_LOCK_intent);
        bch2_btree_iter_node_drop(iter, b);
        if (n3)
                bch2_btree_iter_node_replace(iter, n3);
@@ -1740,7 +1741,10 @@ retry:
 
        bch2_open_buckets_put(c, &n->ob);
 
+       six_lock_increment(&b->lock, SIX_LOCK_intent);
        bch2_btree_iter_node_drop(iter, b);
+       bch2_btree_iter_node_drop(iter, m);
+
        bch2_btree_iter_node_replace(iter, n);
 
        bch2_btree_iter_verify(iter, n);
@@ -1838,6 +1842,7 @@ static int __btree_node_rewrite(struct bch_fs *c, struct btree_iter *iter,
 
        bch2_open_buckets_put(c, &n->ob);
 
+       six_lock_increment(&b->lock, SIX_LOCK_intent);
        bch2_btree_iter_node_drop(iter, b);
        bch2_btree_iter_node_replace(iter, n);
        bch2_btree_node_free_inmem(c, b, iter);