summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2024-04-05 21:32:40 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2024-04-05 23:32:44 -0400
commit7127ca66733ea7dbf48e0362dd134d3b7b8246e6 (patch)
tree91fa53d1f666bdabb790befb85ddf7024517f6bc
parent330275596b0af24653132a0b58780bccf611e27f (diff)
bcachefs: debug assert for merge locking bug
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--fs/bcachefs/btree_update_interior.h13
1 files changed, 12 insertions, 1 deletions
diff --git a/fs/bcachefs/btree_update_interior.h b/fs/bcachefs/btree_update_interior.h
index ca1a3be43af8..804e22dd36eb 100644
--- a/fs/bcachefs/btree_update_interior.h
+++ b/fs/bcachefs/btree_update_interior.h
@@ -5,6 +5,7 @@
#include "btree_cache.h"
#include "btree_locking.h"
#include "btree_update.h"
+#include "error.h"
#define BTREE_UPDATE_NODES_MAX ((BTREE_MAX_DEPTH - 2) * 2 + GC_MERGE_NODES)
@@ -142,7 +143,17 @@ static inline int bch2_foreground_maybe_merge_sibling(struct btree_trans *trans,
struct btree_path *path = trans->paths + path_idx;
struct btree *b;
- EBUG_ON(!btree_node_locked(path, level));
+ if (!btree_node_locked(path, level)) {
+ struct printbuf buf = PRINTBUF;
+ bch2_btree_path_to_text(&buf, trans, path_idx);
+ bch2_fs_fatal_error(trans->c, "node not locked at level %u\n"
+ "trans->restarted %s\n"
+ "%s", level,
+ bch2_err_str(trans->restarted),
+ buf.buf);
+ printbuf_exit(&buf);
+ return 0;
+ }
if (bch2_btree_node_merging_disabled)
return 0;