From bbe65614b7bffaeff5213cb782743e7de3be48d1 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Fri, 24 Apr 2020 18:25:11 -0400 Subject: [PATCH] bcachefs: Fix a deadlock btree_node_lock_increment() was incorrectly skipping over the current iter when checking if we should increment a node we already have locked. Signed-off-by: Kent Overstreet Signed-off-by: Kent Overstreet --- fs/bcachefs/btree_locking.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fs/bcachefs/btree_locking.h b/fs/bcachefs/btree_locking.h index a164924ca656e..3b199e2e1e9e9 100644 --- a/fs/bcachefs/btree_locking.h +++ b/fs/bcachefs/btree_locking.h @@ -164,8 +164,7 @@ static inline bool btree_node_lock_increment(struct btree_iter *iter, struct btree_iter *linked; trans_for_each_iter(iter->trans, linked) - if (linked != iter && - linked->l[level].b == b && + if (linked->l[level].b == b && btree_node_locked_type(linked, level) >= want) { six_lock_increment(&b->c.lock, want); return true; -- 2.30.2