From: Kent Overstreet Date: Sat, 31 Dec 2022 03:41:38 +0000 (-0500) Subject: bcachefs: bch2_btree_iter_peek_slot() now supports BTREE_ITER_WITH_UPDATES X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=e750296bf5599b748360b3497bcfc7243dceb185;p=linux.git bcachefs: bch2_btree_iter_peek_slot() now supports BTREE_ITER_WITH_UPDATES Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index d6de24e92339b..fa21739c24bc9 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -1868,6 +1868,7 @@ __bch2_btree_iter_peek_slot_extents(struct btree_iter *iter) struct bkey_s_c bch2_btree_iter_peek_slot(struct btree_iter *iter) { struct btree_iter_level *l = &iter->l[0]; + struct bkey_i *next_update; struct bkey_s_c k; int ret; @@ -1885,9 +1886,15 @@ struct bkey_s_c bch2_btree_iter_peek_slot(struct btree_iter *iter) return bkey_s_c_err(ret); k = btree_iter_level_peek_all(iter, l); - EBUG_ON(k.k && bkey_deleted(k.k) && bkey_cmp(k.k->p, iter->pos) == 0); + next_update = btree_trans_peek_updates(iter, iter->pos); + if (next_update && + (!k.k || bpos_cmp(next_update->k.p, k.k->p) <= 0)) { + iter->k = next_update->k; + k = bkey_i_to_s_c(next_update); + } + if (!k.k || bkey_cmp(iter->pos, k.k->p)) { /* hole */ bkey_init(&iter->k);