From: Kent Overstreet Date: Mon, 27 Sep 2021 05:56:31 +0000 (-0400) Subject: bcachefs: Fix an assertion X-Git-Tag: io_uring-6.7-2023-11-10~119^2~1375 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=71ed0056dc1f03346eabcdaa37272041e5d52fe9;p=linux-block.git 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 --- diff --git a/fs/bcachefs/btree_update_interior.c b/fs/bcachefs/btree_update_interior.c index 73a79563487d..978bb56275de 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);