diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2024-01-24 22:32:12 +0100 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2024-03-10 20:30:56 +0100 |
commit | fadc6067f2dded5affe0ef281847fa968f1e1354 (patch) | |
tree | 37c75a0ddf6ea5396ea3f4b5faa91f4cfbad1b14 /fs/bcachefs/btree_iter.c | |
parent | bcachefs: Correctly validate k->u64s in btree node read path (diff) | |
download | linux-fadc6067f2dded5affe0ef281847fa968f1e1354.tar.xz linux-fadc6067f2dded5affe0ef281847fa968f1e1354.zip |
bcachefs: Set path->uptodate when no node at level
We were failing to set path->uptodate when reaching the end of a btree
node iterator, causing the new prefetch code for backpointers gc to go
into an infinite loop.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to '')
-rw-r--r-- | fs/bcachefs/btree_iter.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index cab2e3fa900b..e6e7649dec79 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -1146,7 +1146,7 @@ int bch2_btree_path_traverse_one(struct btree_trans *trans, path = &trans->paths[path_idx]; if (unlikely(path->level >= BTREE_MAX_DEPTH)) - goto out; + goto out_uptodate; path->level = btree_path_up_until_good_node(trans, path, 0); @@ -1179,7 +1179,7 @@ int bch2_btree_path_traverse_one(struct btree_trans *trans, goto out; } } - +out_uptodate: path->uptodate = BTREE_ITER_UPTODATE; out: if (bch2_err_matches(ret, BCH_ERR_transaction_restart) != !!trans->restarted) |