bcachefs: Fix bch2_journal_keys_peek_upto()
authorKent Overstreet <kent.overstreet@linux.dev>
Fri, 9 Dec 2022 19:09:14 +0000 (14:09 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:47 +0000 (17:09 -0400)
bch2_journal_keys_peek_upto() was comparing against btree_id & level
incorrectly - fix this by using __journal_key_cmp().

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/recovery.c

index aff813e3e3604566f06986a2b4629dfd11fc2ec1..15a676196e2fdac950af3e5f13eb441632412d46 100644 (file)
@@ -128,12 +128,12 @@ search:
        if (!*idx)
                *idx = __bch2_journal_key_search(keys, btree_id, level, pos);
 
-       while (*idx < keys->nr &&
-              (k = idx_to_key(keys, *idx),
-               k->btree_id == btree_id &&
-               k->level == level &&
-               bpos_le(k->k->k.p, end_pos))) {
-               if (bpos_ge(k->k->k.p, pos) && !k->overwritten)
+       while ((k = *idx < keys->nr ? idx_to_key(keys, *idx) : NULL)) {
+               if (__journal_key_cmp(btree_id, level, end_pos, k) < 0)
+                       return NULL;
+
+               if (__journal_key_cmp(btree_id, level, pos, k) <= 0 &&
+                   !k->overwritten)
                        return k->k;
 
                (*idx)++;