summaryrefslogtreecommitdiff
path: root/fs/bcachefs/btree_locking.h
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2020-06-02 23:36:11 +0300
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-23 00:08:40 +0300
commit495aabede3ff594c5eda98cb9f4463502cb48cad (patch)
treef40b651df22eba1f7aaa5e9596f4ceef0e9f8069 /fs/bcachefs/btree_locking.h
parent61fc3c9610e4728c22e5be67a45d0520b1a388cf (diff)
downloadlinux-495aabede3ff594c5eda98cb9f4463502cb48cad.tar.xz
bcachefs: Add debug code to print btree transactions
Intented to help debug deadlocks, since we can't use lockdep to check btree node lock ordering. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/btree_locking.h')
-rw-r--r--fs/bcachefs/btree_locking.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/fs/bcachefs/btree_locking.h b/fs/bcachefs/btree_locking.h
index 3b199e2e1e9e..cf1801ee14a2 100644
--- a/fs/bcachefs/btree_locking.h
+++ b/fs/bcachefs/btree_locking.h
@@ -181,11 +181,21 @@ static inline bool btree_node_lock(struct btree *b, struct bpos pos,
struct btree_iter *iter,
enum six_lock_type type)
{
+ bool ret;
+
EBUG_ON(level >= BTREE_MAX_DEPTH);
+#ifdef CONFIG_BCACHEFS_DEBUG
+ iter->trans->locking = b;
+#endif
- return likely(six_trylock_type(&b->c.lock, type)) ||
+ ret = likely(six_trylock_type(&b->c.lock, type)) ||
btree_node_lock_increment(iter, b, level, type) ||
__bch2_btree_node_lock(b, pos, level, iter, type);
+
+#ifdef CONFIG_BCACHEFS_DEBUG
+ iter->trans->locking = NULL;
+#endif
+ return ret;
}
bool __bch2_btree_node_relock(struct btree_iter *, unsigned);