summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2025-07-24 14:22:34 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2025-07-24 19:19:57 -0400
commit65b22f692b1dc75e8243c8f3e2829cce0b3065d1 (patch)
tree3d413b326bf3e4878282fc024f30e7126d3e7e59
parent24f40ce1cbf16333c7da0f49eaa5a0ff474e4d7b (diff)
bcachefs: bch2_trans_update_extent() uses extent iterator
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--fs/bcachefs/btree_update.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/fs/bcachefs/btree_update.c b/fs/bcachefs/btree_update.c
index f514a8ad7a89..952ae0eee869 100644
--- a/fs/bcachefs/btree_update.c
+++ b/fs/bcachefs/btree_update.c
@@ -273,11 +273,18 @@ static int bch2_trans_update_extent(struct btree_trans *trans,
enum btree_id btree_id = orig_iter->btree_id;
int ret = 0;
- bch2_trans_iter_init(trans, &iter, btree_id, bkey_start_pos(&insert->k),
+ struct bpos start_pos = bkey_start_pos(&insert->k);
+
+ if (!bkey_eq(start_pos, POS_MIN))
+ start_pos = bpos_nosnap_predecessor(start_pos);
+ start_pos.snapshot = insert->k.p.snapshot;
+
+ bch2_trans_iter_init(trans, &iter, btree_id,
+ start_pos,
BTREE_ITER_intent|
- BTREE_ITER_with_updates|
- BTREE_ITER_not_extents);
- k = bch2_btree_iter_peek_max(trans, &iter, POS(insert->k.p.inode, U64_MAX));
+ BTREE_ITER_with_updates);
+ struct bpos peek_end = bpos_nosnap_successor(insert->k.p);
+ k = bch2_btree_iter_peek_max(trans, &iter, peek_end);
if ((ret = bkey_err(k)))
goto err;
if (!k.k)
@@ -304,7 +311,7 @@ static int bch2_trans_update_extent(struct btree_trans *trans,
goto out;
next:
bch2_btree_iter_advance(trans, &iter);
- k = bch2_btree_iter_peek_max(trans, &iter, POS(insert->k.p.inode, U64_MAX));
+ k = bch2_btree_iter_peek_max(trans, &iter, peek_end);
if ((ret = bkey_err(k)))
goto err;
if (!k.k)