bcachefs: bch2_btree_node_relock_notrace()
authorKent Overstreet <kent.overstreet@linux.dev>
Sun, 25 Sep 2022 20:42:53 +0000 (16:42 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:41 +0000 (17:09 -0400)
Most of the node_relock_fail trace events are generated from
bch2_btree_path_verify_level(), when debugcheck_iterators is enabled -
but we're not interested in these trace events, they don't indicate that
we're in a slowpath.

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

index 962010230c4122f7a2921909c9161002a8045f87..237e5c0afffae301963942de611f5fc72097d2de 100644 (file)
@@ -167,7 +167,7 @@ static void bch2_btree_path_verify_level(struct btree_trans *trans,
        if (!btree_path_node(path, level))
                return;
 
-       if (!bch2_btree_node_relock(trans, path, level))
+       if (!bch2_btree_node_relock_notrace(trans, path, level))
                return;
 
        BUG_ON(!btree_path_pos_in_node(path, l->b));
index 6793d7dd18d793b04d6a7a2314fc571e5dd771c8..19062cea8774cc97351e99fc28b04346848548a2 100644 (file)
@@ -401,7 +401,8 @@ static inline bool btree_path_get_locks(struct btree_trans *trans,
 }
 
 bool __bch2_btree_node_relock(struct btree_trans *trans,
-                             struct btree_path *path, unsigned level)
+                             struct btree_path *path, unsigned level,
+                             bool trace)
 {
        struct btree *b = btree_path_node(path, level);
        int want = __btree_lock_want(path, level);
@@ -416,7 +417,8 @@ bool __bch2_btree_node_relock(struct btree_trans *trans,
                return true;
        }
 fail:
-       trace_and_count(trans->c, btree_path_relock_fail, trans, _RET_IP_, path, level);
+       if (trace)
+               trace_and_count(trans->c, btree_path_relock_fail, trans, _RET_IP_, path, level);
        return false;
 }
 
index 95089693a420b1ffd7469a0504bb21baa412d010..c74a5fd4d908ea977ff74eff575e78c1fff72afc 100644 (file)
@@ -317,7 +317,7 @@ static inline int bch2_btree_path_relock(struct btree_trans *trans,
                : __bch2_btree_path_relock(trans, path, trace_ip);
 }
 
-bool __bch2_btree_node_relock(struct btree_trans *, struct btree_path *, unsigned);
+bool __bch2_btree_node_relock(struct btree_trans *, struct btree_path *, unsigned, bool trace);
 
 static inline bool bch2_btree_node_relock(struct btree_trans *trans,
                                          struct btree_path *path, unsigned level)
@@ -328,7 +328,19 @@ static inline bool bch2_btree_node_relock(struct btree_trans *trans,
 
        return likely(btree_node_locked(path, level)) ||
                (!IS_ERR_OR_NULL(path->l[level].b) &&
-                __bch2_btree_node_relock(trans, path, level));
+                __bch2_btree_node_relock(trans, path, level, true));
+}
+
+static inline bool bch2_btree_node_relock_notrace(struct btree_trans *trans,
+                                                 struct btree_path *path, unsigned level)
+{
+       EBUG_ON(btree_node_locked(path, level) &&
+               !btree_node_write_locked(path, level) &&
+               btree_node_locked_type(path, level) != __btree_lock_want(path, level));
+
+       return likely(btree_node_locked(path, level)) ||
+               (!IS_ERR_OR_NULL(path->l[level].b) &&
+                __bch2_btree_node_relock(trans, path, level, false));
 }
 
 /* upgrade */