bcachefs: Fix bch2_btree_iter_next() after peek_slot()
authorKent Overstreet <kent.overstreet@gmail.com>
Wed, 9 Oct 2019 14:25:32 +0000 (10:25 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:29 +0000 (17:08 -0400)
this deserves a unit test

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

index 78bc82c7b9c33ac3b9bbfabd02a071f5db1d2923..8c6d3193c3fe9acd9a13c63e165a3a09eec8a833 100644 (file)
@@ -1440,6 +1440,14 @@ struct bkey_s_c bch2_btree_iter_next(struct btree_iter *iter)
                return bch2_btree_iter_peek(iter);
        }
 
+       if (unlikely(bkey_deleted(&iter->k))) {
+               /*
+                * we're currently pointed at a hole, because previously we were
+                * iterating over slots:
+                */
+               return bch2_btree_iter_peek(iter);
+       }
+
        do {
                bch2_btree_node_iter_advance(&l->iter, l->b);
                p = bch2_btree_node_iter_peek_all(&l->iter, l->b);