From: Kent Overstreet Date: Tue, 23 Aug 2022 05:20:24 +0000 (-0400) Subject: bcachefs: Print lock counts in debugs btree_transactions X-Git-Tag: v6.7-rc1~201^2~813 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c240c3a94427346f27a7ff48f02cbe03f2c2ebd6;p=thirdparty%2Fkernel%2Flinux.git bcachefs: Print lock counts in debugs btree_transactions Improve our debugfs output, to help in debugging deadlocks: this shows, for every btree node we print, the current number of readers/intent locks/write locks held. Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index ce9437916cf23..99422e29c7048 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -3024,9 +3024,21 @@ bch2_btree_path_node_to_text(struct printbuf *out, struct btree_bkey_cached_common *b, bool cached) { + struct six_lock_count c = six_lock_counts(&b->lock); + struct task_struct *owner; + pid_t pid; + + rcu_read_lock(); + owner = READ_ONCE(b->lock.owner); + pid = owner ? owner->pid : 0;; + rcu_read_unlock(); + prt_printf(out, " l=%u %s:", b->level, bch2_btree_ids[b->btree_id]); bch2_bpos_to_text(out, btree_node_pos(b, cached)); + + prt_printf(out, " locks %u:%u:%u held by pid %u", + c.n[0], c.n[1], c.n[2], pid); } #ifdef CONFIG_BCACHEFS_DEBUG_TRANSACTIONS