projects
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
1d214eb
)
bcachefs: bch2_btree_iter_peek_slot() now saves initial position when searching
author
Kent Overstreet
<kent.overstreet@linux.dev>
Sat, 31 Dec 2022 00:15:53 +0000
(19:15 -0500)
committer
Kent Overstreet
<kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:06 +0000
(17:09 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_iter.c
patch
|
blob
|
history
diff --git
a/fs/bcachefs/btree_iter.c
b/fs/bcachefs/btree_iter.c
index 6f313e598335a2bfcd4d8eea0e1334fda63115e7..491cc279a9735d4fb70d1d8b9071a071355f7dc9 100644
(file)
--- 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;