From cab8e233734d89cd3c857ee42fe26e49f57d5e75 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Wed, 1 Sep 2021 00:50:18 -0400 Subject: [PATCH] bcachefs: Add an assertion for removing btree nodes from cache Chasing a bug that has something to do with the btree node cache. Signed-off-by: Kent Overstreet --- fs/bcachefs/btree_cache.c | 3 ++- fs/bcachefs/btree_update_interior.c | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/fs/bcachefs/btree_cache.c b/fs/bcachefs/btree_cache.c index 354c75f59730..c94ed4da1ca4 100644 --- a/fs/bcachefs/btree_cache.c +++ b/fs/bcachefs/btree_cache.c @@ -129,7 +129,8 @@ struct btree *__bch2_btree_node_mem_alloc(struct bch_fs *c) void bch2_btree_node_hash_remove(struct btree_cache *bc, struct btree *b) { - rhashtable_remove_fast(&bc->table, &b->hash, bch_btree_cache_params); + int ret = rhashtable_remove_fast(&bc->table, &b->hash, bch_btree_cache_params); + BUG_ON(ret); /* Cause future lookups for this node to fail: */ b->hash_val = 0; diff --git a/fs/bcachefs/btree_update_interior.c b/fs/bcachefs/btree_update_interior.c index b115b9246880..652f08dea804 100644 --- a/fs/bcachefs/btree_update_interior.c +++ b/fs/bcachefs/btree_update_interior.c @@ -153,8 +153,6 @@ static void __btree_node_free(struct bch_fs *c, struct btree *b) clear_btree_node_noevict(b); - bch2_btree_node_hash_remove(&c->btree_cache, b); - mutex_lock(&c->btree_cache.lock); list_move(&b->list, &c->btree_cache.freeable); mutex_unlock(&c->btree_cache.lock); @@ -170,7 +168,10 @@ static void bch2_btree_node_free_inmem(struct btree_trans *trans, BUG_ON(iter->l[b->c.level].b == b); six_lock_write(&b->c.lock, NULL, NULL); + + bch2_btree_node_hash_remove(&c->btree_cache, b); __btree_node_free(c, b); + six_unlock_write(&b->c.lock); six_unlock_intent(&b->c.lock); } -- 2.20.1