From f59c5bdf552ed31c6b23fbde6d541ffd35b310d3 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Tue, 2 Jan 2018 19:37:23 -0500 Subject: bcachefs: fix btree_iter_drop_extra_locks() --- fs/bcachefs/btree_iter.c | 13 ++++++------- 1 file 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; } } } -- cgit v1.2.3