summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2021-08-07 18:21:35 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2021-08-07 18:21:35 -0400
commite3b0c3a92a5fb8b6d9b68d28eaf9eb0ae61d58c4 (patch)
tree6627040ef84319aa7cea75c284edae9294f8bd16
parent60fbf06f49679fdb2b37e1e863c321dfddfc3a4a (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.c9
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;