summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2024-08-13 22:40:39 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2024-08-13 22:56:50 -0400
commita24e6e7146e361aa0855cf8ee3b2e80b8eb692e3 (patch)
tree9635a2724eefac24fa77f924a00b09c97c8d0c27
parent8a2491db7bea6ad88ec568731eafd583501f1c96 (diff)
downloadlinux-stable-a24e6e7146e361aa0855cf8ee3b2e80b8eb692e3.tar.gz
linux-stable-a24e6e7146e361aa0855cf8ee3b2e80b8eb692e3.tar.bz2
linux-stable-a24e6e7146e361aa0855cf8ee3b2e80b8eb692e3.zip
bcachefs: delete faulty fastpath in bch2_btree_path_traverse_cached()
bch2_btree_path_traverse_cached() was previously checking if it could just relock the path, which is a common idiom in path traversal. However, it was using btree_node_relock(), not btree_path_relock(); btree_path_relock() only succeeds if the path was in state BTREE_ITER_NEED_RELOCK. If the path was in state BTREE_ITER_NEED_TRAVERSE a full traversal is needed; this led to a null ptr deref in bch2_btree_path_traverse_cached(). And the short circuit check here isn't needed, since it was already done in the main bch2_btree_path_traverse_one(). Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--fs/bcachefs/btree_key_cache.c5
1 files changed, 0 insertions, 5 deletions
diff --git a/fs/bcachefs/btree_key_cache.c b/fs/bcachefs/btree_key_cache.c
index f2f2e525460b..79954490627c 100644
--- a/fs/bcachefs/btree_key_cache.c
+++ b/fs/bcachefs/btree_key_cache.c
@@ -497,11 +497,6 @@ int bch2_btree_path_traverse_cached(struct btree_trans *trans, struct btree_path
path->l[1].b = NULL;
- if (bch2_btree_node_relock_notrace(trans, path, 0)) {
- path->uptodate = BTREE_ITER_UPTODATE;
- return 0;
- }
-
int ret;
do {
ret = btree_path_traverse_cached_fast(trans, path);