From: Kent Overstreet Date: Wed, 14 Apr 2021 17:29:34 +0000 (-0400) Subject: bcachefs: Better iterator picking X-Git-Tag: io_uring-6.7-2023-11-10~119^2~1647 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=a0c9cc1727ecf302ab0be07e93d0c023e64be8da;p=linux-block.git bcachefs: Better iterator picking Avoid cloning iterators if we don't have to. Signed-off-by: Kent Overstreet Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index 033a079fb3f3..7d8b7d765cf7 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -2017,10 +2017,14 @@ struct btree_iter *__bch2_trans_get_iter(struct btree_trans *trans, if (iter->btree_id != btree_id) continue; - if (best && - bkey_cmp(bpos_diff(best->real_pos, pos), - bpos_diff(iter->real_pos, pos)) < 0) - continue; + if (best) { + int cmp = bkey_cmp(bpos_diff(best->real_pos, pos), + bpos_diff(iter->real_pos, pos)); + + if (cmp < 0 || + ((cmp == 0 && btree_iter_keep(trans, iter)))) + continue; + } best = iter; }