summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2019-10-09 10:25:32 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2019-10-09 15:24:08 -0400
commit0c12059982d57d6d85dba1c77acf170eaca13ff3 (patch)
tree868ace92e0be6c55fb5056e6dc1fb712eadafb86
parentaedaae86b4f14ebb2dbaea450be9dcbbfe349de2 (diff)
bcachefs: Fix bch2_btree_iter_next() after peek_slot()
this deserves a unit test Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
-rw-r--r--fs/bcachefs/btree_iter.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c
index f7039df977ba..e7f7820f9392 100644
--- a/fs/bcachefs/btree_iter.c
+++ b/fs/bcachefs/btree_iter.c
@@ -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);