diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2019-03-29 14:42:34 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2019-03-29 15:03:26 -0400 |
commit | 107f74d3ce6cf2aa685c8b336d57fc469801e4d3 (patch) | |
tree | ce6149668654d3324605c4b5bb92203a1192809c | |
parent | 1712318522fdaa533f8622f4c7da05e44a4828b0 (diff) |
bcachefs: add missing bch2_btree_iter_node_drop() call
-rw-r--r-- | fs/bcachefs/btree_iter.c | 8 | ||||
-rw-r--r-- | fs/bcachefs/btree_update_interior.c | 5 |
2 files changed, 5 insertions, 8 deletions
diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index 49ad6df8125f..bbf6d17355ba 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -818,14 +818,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); diff --git a/fs/bcachefs/btree_update_interior.c b/fs/bcachefs/btree_update_interior.c index 620217276e85..e9d5a892bf5a 100644 --- a/fs/bcachefs/btree_update_interior.c +++ b/fs/bcachefs/btree_update_interior.c @@ -1428,6 +1428,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); @@ -1739,7 +1740,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); @@ -1837,6 +1841,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); |