summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2021-09-27 01:56:31 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2021-09-27 01:56:31 -0400
commitb634e9b34ef646355a75a3375f3662850268e682 (patch)
treeba1aa3d0797aab1f43581e6bf8831d218a1fecab
parent386f00b6399a1eb38053c236aae87678f3535df7 (diff)
bcachefs: Fix an assertion
We can end up in a strange situation where a btree_path points to a node being freed even after pointers to it should have been replaced by pointers to the new node - if the btree node has been reused since the pointer to it was created. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
-rw-r--r--fs/bcachefs/btree_update_interior.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/bcachefs/btree_update_interior.c b/fs/bcachefs/btree_update_interior.c
index 5a1420b392ba..c54e6b46a026 100644
--- a/fs/bcachefs/btree_update_interior.c
+++ b/fs/bcachefs/btree_update_interior.c
@@ -165,7 +165,8 @@ static void bch2_btree_node_free_inmem(struct btree_trans *trans,
struct btree_path *path;
trans_for_each_path(trans, path)
- BUG_ON(path->l[b->c.level].b == b);
+ BUG_ON(path->l[b->c.level].b == b &&
+ path->l[b->c.level].lock_seq == b->c.lock.state.seq);
six_lock_write(&b->c.lock, NULL, NULL);