bcachefs: Verify transaction updates are sorted
authorKent Overstreet <kent.overstreet@gmail.com>
Tue, 19 Jan 2021 00:59:03 +0000 (19:59 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:51 +0000 (17:08 -0400)
A user reported a bug that implies they might not be correctly sorted,
this should help track that down.

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

index a25cc3b7db39347e12a9eaa36cb0301b25ce3470..ffd8e0b142570d3aecd78889a3b4da466dc4f42a 100644 (file)
@@ -981,10 +981,22 @@ int bch2_trans_update(struct btree_trans *trans, struct btree_iter *iter,
                .trigger_flags = flags, .iter = iter, .k = k
        };
 
-       EBUG_ON(bkey_cmp(iter->pos,
-                        (iter->flags & BTREE_ITER_IS_EXTENTS)
-                        ? bkey_start_pos(&k->k)
-                        : k->k.p));
+#ifdef CONFIG_BCACHEFS_DEBUG
+       BUG_ON(bkey_cmp(iter->pos,
+                       (iter->flags & BTREE_ITER_IS_EXTENTS)
+                       ? bkey_start_pos(&k->k)
+                       : k->k.p));
+
+       trans_for_each_update(trans, i) {
+               BUG_ON(bkey_cmp(i->iter->pos,
+                                (i->iter->flags & BTREE_ITER_IS_EXTENTS)
+                                ? bkey_start_pos(&i->k->k)
+                                : i->k->k.p));
+
+               BUG_ON(i != trans->updates &&
+                      btree_iter_pos_cmp(i[-1].iter, i[0].iter) >= 0);
+       }
+#endif
 
        iter->flags |= BTREE_ITER_KEEP_UNTIL_COMMIT;