summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2018-01-02 19:37:23 -0500
committerKent Overstreet <kent.overstreet@gmail.com>2018-05-22 00:44:18 -0400
commitf59c5bdf552ed31c6b23fbde6d541ffd35b310d3 (patch)
tree89bf4dd2b509ffa7b15475bd003255871e4b3f25
parentcfc45a7404adaf6d929149dd771888b0dd93f939 (diff)
bcachefs: fix btree_iter_drop_extra_locks()
-rw-r--r--fs/bcachefs/btree_iter.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c
index 0b505a738e86..85c8bd3b396b 100644
--- a/fs/bcachefs/btree_iter.c
+++ b/fs/bcachefs/btree_iter.c
@@ -202,21 +202,20 @@ bool __bch2_btree_node_lock(struct btree *b, struct bpos pos,
/* Btree iterator locking: */
-
static void btree_iter_drop_extra_locks(struct btree_iter *iter)
{
unsigned l;
while (iter->nodes_locked &&
(l = __fls(iter->nodes_locked)) > iter->locks_want) {
- if (!btree_node_locked(iter, l))
- panic("l %u nodes_locked %u\n", l, iter->nodes_locked);
-
if (l > iter->level) {
btree_node_unlock(iter, l);
- } else if (btree_node_intent_locked(iter, l)) {
- six_lock_downgrade(&iter->nodes[l]->lock);
- iter->nodes_intent_locked ^= 1 << l;
+ } else {
+ if (btree_node_intent_locked(iter, l)) {
+ six_lock_downgrade(&iter->nodes[l]->lock);
+ iter->nodes_intent_locked ^= 1 << l;
+ }
+ break;
}
}
}