bcachefs: Ensure we wake up threads locking node when reusing it
authorKent Overstreet <kent.overstreet@gmail.com>
Sat, 25 Jul 2020 19:37:14 +0000 (15:37 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:43 +0000 (17:08 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_cache.c
fs/bcachefs/btree_update_interior.c

index dedb2790445d8a0f186795c78442402e449f410b..6280110ba32b834874aac35a65f57b9608ff6016 100644 (file)
@@ -125,6 +125,8 @@ void bch2_btree_node_hash_remove(struct btree_cache *bc, struct btree *b)
 
        /* Cause future lookups for this node to fail: */
        b->hash_val = 0;
+
+       six_lock_wakeup_all(&b->c.lock);
 }
 
 int __bch2_btree_node_hash_insert(struct btree_cache *bc, struct btree *b)
index 5317f29c27766f8530f61b47d2d3347cdb084b2d..d81aa039d27f07ed4d0fea81f76bf11e0f6ac170 100644 (file)
@@ -138,8 +138,6 @@ static void __btree_node_free(struct bch_fs *c, struct btree *b)
 
        bch2_btree_node_hash_remove(&c->btree_cache, b);
 
-       six_lock_wakeup_all(&b->c.lock);
-
        mutex_lock(&c->btree_cache.lock);
        list_move(&b->list, &c->btree_cache.freeable);
        mutex_unlock(&c->btree_cache.lock);