]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
bcachefs: debug_check_btree_locking modparam
authorKent Overstreet <kent.overstreet@linux.dev>
Sat, 10 May 2025 19:12:13 +0000 (15:12 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Thu, 22 May 2025 00:14:54 +0000 (20:14 -0400)
Don't put btree locking asserts behind CONFIG_BCACHEFS_DEBUG, put them
behind a module parameter.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/bcachefs.h
fs/bcachefs/btree_locking.c
fs/bcachefs/btree_locking.h

index 46976409f733dd91475c92a67edc7dfd6cb74eeb..ae6b743ae0141a072cad1199c54321cc6e183380 100644 (file)
@@ -393,6 +393,8 @@ do {                                                                        \
                "Disables rewriting of btree nodes during mark and sweep")\
        BCH_DEBUG_PARAM(btree_shrinker_disabled,                        \
                "Disables the shrinker callback for the btree node cache")\
+       BCH_DEBUG_PARAM(verify_btree_locking,                           \
+               "Enable additional asserts for btree locking")          \
        BCH_DEBUG_PARAM(verify_btree_ondisk,                            \
                "Reread btree nodes at various points to verify the "   \
                "mergesort in the read path against modifications "     \
index 448613be90ba4f03f5f171b6cf8faa1d4cd8bed6..a45cfae8f67180ddd23616fddcc7547743621d2f 100644 (file)
@@ -839,9 +839,7 @@ int __bch2_trans_mutex_lock(struct btree_trans *trans,
 
 /* Debug */
 
-#ifdef CONFIG_BCACHEFS_DEBUG
-
-void bch2_btree_path_verify_locks(struct btree_path *path)
+void __bch2_btree_path_verify_locks(struct btree_path *path)
 {
        /*
         * A path may be uptodate and yet have nothing locked if and only if
@@ -882,7 +880,7 @@ static bool bch2_trans_locked(struct btree_trans *trans)
        return false;
 }
 
-void bch2_trans_verify_locks(struct btree_trans *trans)
+void __bch2_trans_verify_locks(struct btree_trans *trans)
 {
        if (!trans->locked) {
                BUG_ON(bch2_trans_locked(trans));
@@ -893,7 +891,5 @@ void bch2_trans_verify_locks(struct btree_trans *trans)
        unsigned i;
 
        trans_for_each_path(trans, path, i)
-               bch2_btree_path_verify_locks(path);
+               __bch2_btree_path_verify_locks(path);
 }
-
-#endif
index 59000d0dabeacdd03da696e05a7eb31305941ec1..1bb28e21d021a16dc772622bbb57467e76fdc178 100644 (file)
@@ -429,12 +429,19 @@ struct six_lock_count bch2_btree_node_lock_counts(struct btree_trans *,
 
 int bch2_check_for_deadlock(struct btree_trans *, struct printbuf *);
 
-#ifdef CONFIG_BCACHEFS_DEBUG
-void bch2_btree_path_verify_locks(struct btree_path *);
-void bch2_trans_verify_locks(struct btree_trans *);
-#else
-static inline void bch2_btree_path_verify_locks(struct btree_path *path) {}
-static inline void bch2_trans_verify_locks(struct btree_trans *trans) {}
-#endif
+void __bch2_btree_path_verify_locks(struct btree_path *);
+void __bch2_trans_verify_locks(struct btree_trans *);
+
+static inline void bch2_btree_path_verify_locks(struct btree_path *path)
+{
+       if (static_branch_unlikely(&bch2_debug_check_btree_locking))
+               __bch2_btree_path_verify_locks(path);
+}
+
+static inline void bch2_trans_verify_locks(struct btree_trans *trans)
+{
+       if (static_branch_unlikely(&bch2_debug_check_btree_locking))
+               __bch2_trans_verify_locks(trans);
+}
 
 #endif /* _BCACHEFS_BTREE_LOCKING_H */