diff options
Diffstat (limited to 'fs/bcachefs/btree_iter.c')
-rw-r--r-- | fs/bcachefs/btree_iter.c | 33 |
1 files changed, 8 insertions, 25 deletions
diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index f4a1fdb5931a..dd716b35a11d 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -2448,27 +2448,10 @@ struct bkey_s_c bch2_btree_iter_peek_max(struct btree_trans *trans, struct btree continue; } - if (!(iter->flags & BTREE_ITER_nofilter_whiteouts)) { - /* - * KEY_TYPE_extent_whiteout indicates that there - * are no extents that overlap with this - * whiteout - meaning bkey_start_pos() is - * monotonically increasing when including - * KEY_TYPE_extent_whiteout (not - * KEY_TYPE_whiteout). - * - * Without this @end wouldn't be able to - * terminate searches and we'd have to scan - * through tons of whiteouts: - */ - if (k.k->type == KEY_TYPE_extent_whiteout && - bkey_ge(k.k->p, end)) - goto end; - - if (bkey_extent_whiteout(k.k)) { - search_key = bkey_successor(iter, k.k->p); - continue; - } + if (bkey_whiteout(k.k) && + !(iter->flags & BTREE_ITER_key_cache_fill)) { + search_key = bkey_successor(iter, k.k->p); + continue; } } @@ -2728,7 +2711,7 @@ struct bkey_s_c bch2_btree_iter_peek_prev_min(struct btree_trans *trans, struct saved_path = 0; } - if (!bkey_extent_whiteout(k.k)) { + if (!bkey_whiteout(k.k)) { saved_path = btree_path_clone(trans, iter->path, iter->flags & BTREE_ITER_intent, _THIS_IP_); @@ -2741,7 +2724,7 @@ struct bkey_s_c bch2_btree_iter_peek_prev_min(struct btree_trans *trans, struct continue; } - if (bkey_extent_whiteout(k.k)) { + if (bkey_whiteout(k.k)) { search_key = bkey_predecessor(iter, k.k->p); search_key.snapshot = U32_MAX; continue; @@ -2882,9 +2865,9 @@ struct bkey_s_c bch2_btree_iter_peek_slot(struct btree_trans *trans, struct btre iter->k = *k.k; } - if (unlikely(bkey_extent_whiteout(k.k) && + if (unlikely(k.k->type == KEY_TYPE_whiteout && (iter->flags & BTREE_ITER_filter_snapshots) && - !(iter->flags & BTREE_ITER_nofilter_whiteouts))) + !(iter->flags & BTREE_ITER_key_cache_fill))) iter->k.type = KEY_TYPE_deleted; } else { struct bpos next; |