summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2018-12-06 12:01:29 -0500
committerKent Overstreet <kent.overstreet@gmail.com>2018-12-27 11:38:36 -0500
commit9e47f3804c0e844b81d151efb3aad10d5930824d (patch)
tree2cc4bb7d39819aafd179ed2a455f3caf6ab71a7a
parent66fcc6fa6980273985bc0efe9cd48b03f0cd9f4e (diff)
bcachefs: fix an incorrect bkey_debugcheck() call
-rw-r--r--fs/bcachefs/btree_iter.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c
index f4922bce27bb..73e2c5ef2eab 100644
--- a/fs/bcachefs/btree_iter.c
+++ b/fs/bcachefs/btree_iter.c
@@ -530,8 +530,24 @@ found:
btree_iter_set_dirty(iter, BTREE_ITER_NEED_PEEK);
bch2_btree_node_iter_sort(node_iter, b);
- if (!b->level && node_iter == &iter->l[0].iter)
+ if (!b->level && node_iter == &iter->l[0].iter) {
+ /*
+ * not legal to call bkey_debugcheck() here, because we're
+ * called midway through the update path after update has been
+ * marked but before deletes have actually happened:
+ */
+#if 0
__btree_iter_peek_all(iter, &iter->l[0], &iter->k);
+#endif
+ struct btree_iter_level *l = &iter->l[0];
+ struct bkey_packed *k =
+ bch2_btree_node_iter_peek_all(&l->iter, l->b);
+
+ if (unlikely(!k))
+ iter->k.type = KEY_TYPE_deleted;
+ else
+ bkey_disassemble(l->b, k, &iter->k);
+ }
iter_current_key_not_modified:
/*