bcachefs: Improve bch2_btree_node_relock()
authorKent Overstreet <kent.overstreet@linux.dev>
Sat, 27 Aug 2022 16:28:09 +0000 (12:28 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:39 +0000 (17:09 -0400)
This moves the IS_ERR_OR_NULL() check to the inline part, since that's a
fast path event.

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

index 8376067280eaa37021153a4f12f929411bfbb4d6..76d99c694948dcb6547105186fcb4e02aa6f7351 100644 (file)
@@ -208,9 +208,6 @@ bool __bch2_btree_node_relock(struct btree_trans *trans,
        struct btree *b = btree_path_node(path, level);
        int want = __btree_lock_want(path, level);
 
-       if (!is_btree_node(path, level))
-               goto fail;
-
        if (race_fault())
                goto fail;
 
@@ -221,10 +218,7 @@ bool __bch2_btree_node_relock(struct btree_trans *trans,
                return true;
        }
 fail:
-       if (b != ERR_PTR(-BCH_ERR_no_btree_node_cached) &&
-           b != ERR_PTR(-BCH_ERR_no_btree_node_init) &&
-           b != ERR_PTR(-BCH_ERR_no_btree_node_up))
-               trace_btree_node_relock_fail(trans, _RET_IP_, path, level);
+       trace_btree_node_relock_fail(trans, _RET_IP_, path, level);
        return false;
 }
 
index a221c4fd1bf9527347e930ce27ffa807ad2d6972..3bc5df4263f8b01264d90c0bc3f05acbec183b0f 100644 (file)
@@ -325,7 +325,8 @@ static inline bool bch2_btree_node_relock(struct btree_trans *trans,
                btree_node_locked_type(path, level) != __btree_lock_want(path, level));
 
        return likely(btree_node_locked(path, level)) ||
-               __bch2_btree_node_relock(trans, path, level);
+               (!IS_ERR_OR_NULL(path->l[level].b) &&
+                __bch2_btree_node_relock(trans, path, level));
 }
 
 /* upgrade */