From 3745efd618b24d15443f9d1bf75744bea9c3a73f Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Fri, 13 Sep 2019 14:50:02 -0400 Subject: [PATCH] bcachefs: Improve btree_iter_pos_in_node() Signed-off-by: Kent Overstreet --- fs/bcachefs/btree_iter.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index 547a07865ac6d..5b2a5aa05403c 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -742,18 +742,29 @@ static void btree_iter_verify_new_node(struct btree_iter *iter, struct btree *b) btree_node_unlock(iter, b->c.level + 1); } +static inline bool btree_iter_pos_before_node(struct btree_iter *iter, + struct btree *b) +{ + return bkey_cmp(iter->pos, b->data->min_key) < 0; +} + static inline bool btree_iter_pos_after_node(struct btree_iter *iter, struct btree *b) { - return __btree_iter_pos_cmp(iter, NULL, - bkey_to_packed(&b->key), true) < 0; + int cmp = bkey_cmp(b->key.k.p, iter->pos); + + if (!cmp && + (iter->flags & BTREE_ITER_IS_EXTENTS) && + bkey_cmp(b->key.k.p, POS_MAX)) + cmp = -1; + return cmp < 0; } static inline bool btree_iter_pos_in_node(struct btree_iter *iter, struct btree *b) { return iter->btree_id == b->c.btree_id && - bkey_cmp(iter->pos, b->data->min_key) >= 0 && + !btree_iter_pos_before_node(iter, b) && !btree_iter_pos_after_node(iter, b); } -- 2.30.2