mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-15 07:04:44 +00:00
bcachefs: trans_get_key() now works correctly for extents
More prep work for reflink: for extents, we're not looking for an exact mach on pos, rather that the pos is within the range of the key the iterator points to. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
5b6d40e2b6
commit
e3d3a9d91a
1 changed files with 12 additions and 7 deletions
|
@ -1342,15 +1342,20 @@ static int trans_get_key(struct btree_trans *trans,
|
|||
struct btree_iter **iter,
|
||||
struct bkey_s_c *k)
|
||||
{
|
||||
unsigned i;
|
||||
struct btree_insert_entry *i;
|
||||
int ret;
|
||||
|
||||
for (i = 0; i < trans->nr_updates; i++)
|
||||
if (!trans->updates[i].deferred &&
|
||||
trans->updates[i].iter->btree_id == btree_id &&
|
||||
!bkey_cmp(pos, trans->updates[i].iter->pos)) {
|
||||
*iter = trans->updates[i].iter;
|
||||
*k = bkey_i_to_s_c(trans->updates[i].k);
|
||||
for (i = trans->updates;
|
||||
i < trans->updates + trans->nr_updates;
|
||||
i++)
|
||||
if (!i->deferred &&
|
||||
i->iter->btree_id == btree_id &&
|
||||
(btree_node_type_is_extents(btree_id)
|
||||
? bkey_cmp(pos, bkey_start_pos(&i->k->k)) >= 0 &&
|
||||
bkey_cmp(pos, i->k->k.p) < 0
|
||||
: !bkey_cmp(pos, i->iter->pos))) {
|
||||
*iter = i->iter;
|
||||
*k = bkey_i_to_s_c(i->k);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue