From: Kent Overstreet Date: Sat, 27 Aug 2022 16:28:09 +0000 (-0400) Subject: bcachefs: Improve bch2_btree_node_relock() X-Git-Tag: v6.7-rc1~201^2~807 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8a9c1b1cb0edacdf4ac9c378c4ec4fc376fc8bac;p=thirdparty%2Fkernel%2Flinux.git bcachefs: Improve bch2_btree_node_relock() This moves the IS_ERR_OR_NULL() check to the inline part, since that's a fast path event. Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/btree_locking.c b/fs/bcachefs/btree_locking.c index 8376067280eaa..76d99c694948d 100644 --- a/fs/bcachefs/btree_locking.c +++ b/fs/bcachefs/btree_locking.c @@ -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; } diff --git a/fs/bcachefs/btree_locking.h b/fs/bcachefs/btree_locking.h index a221c4fd1bf95..3bc5df4263f8b 100644 --- a/fs/bcachefs/btree_locking.h +++ b/fs/bcachefs/btree_locking.h @@ -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 */