diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2018-01-02 19:37:23 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2018-05-22 00:44:18 -0400 |
commit | f59c5bdf552ed31c6b23fbde6d541ffd35b310d3 (patch) | |
tree | 89bf4dd2b509ffa7b15475bd003255871e4b3f25 | |
parent | cfc45a7404adaf6d929149dd771888b0dd93f939 (diff) |
bcachefs: fix btree_iter_drop_extra_locks()
-rw-r--r-- | fs/bcachefs/btree_iter.c | 13 |
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; } } } |