From b1d87f527d7e6eb89395d4a0218b7e4e3974ff1b Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Fri, 30 Dec 2022 19:15:53 -0500 Subject: [PATCH] bcachefs: bch2_btree_iter_peek_slot() now saves initial position when searching Signed-off-by: Kent Overstreet --- fs/bcachefs/btree_iter.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index 6f313e598335a..491cc279a9735 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -1869,10 +1869,22 @@ struct bkey_s_c bch2_btree_iter_peek_slot(struct btree_iter *iter) } } else { struct bpos next; - struct bpos pos = iter->pos; - k = bch2_btree_iter_peek(iter); - iter->pos = pos; + if (iter->flags & BTREE_ITER_INTENT) { + struct btree_iter *child = + btree_iter_child_alloc(iter, _THIS_IP_); + + btree_iter_copy(child, iter); + k = bch2_btree_iter_peek(child); + + if (k.k && !bkey_err(k)) + iter->k = child->k; + } else { + struct bpos pos = iter->pos; + + k = bch2_btree_iter_peek(iter); + iter->pos = pos; + } if (unlikely(bkey_err(k))) return k; -- 2.30.2