diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2025-07-24 14:22:34 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2025-07-24 19:19:57 -0400 |
commit | 65b22f692b1dc75e8243c8f3e2829cce0b3065d1 (patch) | |
tree | 3d413b326bf3e4878282fc024f30e7126d3e7e59 | |
parent | 24f40ce1cbf16333c7da0f49eaa5a0ff474e4d7b (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.c | 17 |
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) |