From 10668f6a5256abb30c69747e8396c347649d0087 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Mon, 3 Oct 2022 16:39:49 -0400 Subject: bcachefs: bch2_trans_locked() Useful debugging function. Signed-off-by: Kent Overstreet --- fs/bcachefs/btree_iter.h | 1 + fs/bcachefs/btree_locking.c | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/fs/bcachefs/btree_iter.h b/fs/bcachefs/btree_iter.h index 4ec873aa1f58..910f6d7bc961 100644 --- a/fs/bcachefs/btree_iter.h +++ b/fs/bcachefs/btree_iter.h @@ -171,6 +171,7 @@ void bch2_path_put(struct btree_trans *, struct btree_path *, bool); int bch2_trans_relock(struct btree_trans *); void bch2_trans_unlock(struct btree_trans *); +bool bch2_trans_locked(struct btree_trans *); static inline bool trans_was_restarted(struct btree_trans *trans, u32 restart_count) { diff --git a/fs/bcachefs/btree_locking.c b/fs/bcachefs/btree_locking.c index d631c8aaade5..f4340086c357 100644 --- a/fs/bcachefs/btree_locking.c +++ b/fs/bcachefs/btree_locking.c @@ -624,8 +624,18 @@ void bch2_trans_unlock(struct btree_trans *trans) * bch2_gc_btree_init_recurse() doesn't use btree iterators for walking * btree nodes, it implements its own walking: */ - BUG_ON(!trans->is_initial_gc && - lock_class_is_held(&bch2_btree_node_lock_key)); + EBUG_ON(!trans->is_initial_gc && + lock_class_is_held(&bch2_btree_node_lock_key)); +} + +bool bch2_trans_locked(struct btree_trans *trans) +{ + struct btree_path *path; + + trans_for_each_path(trans, path) + if (path->nodes_locked) + return true; + return false; } /* Debug */ -- cgit v1.2.3