From: Kent Overstreet Date: Sat, 31 Dec 2022 00:15:53 +0000 (-0500) Subject: bcachefs: bch2_btree_iter_peek_slot() now saves initial position when searching X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=b1d87f527d7e6eb89395d4a0218b7e4e3974ff1b;p=linux.git bcachefs: bch2_btree_iter_peek_slot() now saves initial position when searching Signed-off-by: Kent Overstreet --- 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;