diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2021-08-07 18:21:35 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2021-08-07 18:21:35 -0400 |
commit | e3b0c3a92a5fb8b6d9b68d28eaf9eb0ae61d58c4 (patch) | |
tree | 6627040ef84319aa7cea75c284edae9294f8bd16 | |
parent | 60fbf06f49679fdb2b37e1e863c321dfddfc3a4a (diff) |
bcachefs: Fix btree_trans_peek_updates()
Should have been using bpos_cmp(), not bkey_cmp().
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
-rw-r--r-- | fs/bcachefs/btree_iter.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index fe710d19ca19..b7eef572e7ec 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -1708,8 +1708,7 @@ static inline bool btree_iter_set_pos_to_prev_leaf(struct btree_iter *iter) return ret; } -static inline struct bkey_i *btree_trans_peek_updates(struct btree_iter *iter, - struct bpos pos) +static inline struct bkey_i *btree_trans_peek_updates(struct btree_iter *iter) { struct btree_insert_entry *i; @@ -1718,7 +1717,7 @@ static inline struct bkey_i *btree_trans_peek_updates(struct btree_iter *iter, trans_for_each_update(iter->trans, i) if ((cmp_int(iter->btree_id, i->iter->btree_id) ?: - bkey_cmp(pos, i->k->k.p)) <= 0) { + bpos_cmp(iter->real_pos, i->k->k.p)) <= 0) { if (iter->btree_id == i->iter->btree_id) return i->k; break; @@ -1742,7 +1741,6 @@ struct bkey_s_c bch2_btree_iter_peek(struct btree_iter *iter) bch2_btree_iter_verify(iter); bch2_btree_iter_verify_entry_exit(iter); start: - next_update = btree_trans_peek_updates(iter, search_key); btree_iter_set_search_pos(iter, search_key); while (1) { @@ -1752,6 +1750,7 @@ start: k = btree_iter_level_peek(iter, &iter->l[0]); + next_update = btree_trans_peek_updates(iter); if (next_update && bpos_cmp(next_update->k.p, iter->real_pos) <= 0) { iter->k = next_update->k; @@ -1920,7 +1919,7 @@ struct bkey_s_c bch2_btree_iter_peek_slot(struct btree_iter *iter) BUG(); } - next_update = btree_trans_peek_updates(iter, search_key); + next_update = btree_trans_peek_updates(iter); if (next_update && (!k.k || bpos_cmp(next_update->k.p, k.k->p) <= 0)) { iter->k = next_update->k; |