bcachefs: Fix a lockdep splat
We can't allocate memory with GFP_FS while holding the btree cache lock, and vfree() can allocate memory. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
committed by
Kent Overstreet
parent
9ba2eb25f0
commit
5d0b7f906a
@@ -349,11 +349,13 @@ void bch2_fs_btree_cache_exit(struct bch_fs *c)
|
|||||||
{
|
{
|
||||||
struct btree_cache *bc = &c->btree_cache;
|
struct btree_cache *bc = &c->btree_cache;
|
||||||
struct btree *b;
|
struct btree *b;
|
||||||
unsigned i;
|
unsigned i, flags;
|
||||||
|
|
||||||
if (bc->shrink.list.next)
|
if (bc->shrink.list.next)
|
||||||
unregister_shrinker(&bc->shrink);
|
unregister_shrinker(&bc->shrink);
|
||||||
|
|
||||||
|
/* vfree() can allocate memory: */
|
||||||
|
flags = memalloc_nofs_save();
|
||||||
mutex_lock(&bc->lock);
|
mutex_lock(&bc->lock);
|
||||||
|
|
||||||
#ifdef CONFIG_BCACHEFS_DEBUG
|
#ifdef CONFIG_BCACHEFS_DEBUG
|
||||||
@@ -389,6 +391,7 @@ void bch2_fs_btree_cache_exit(struct bch_fs *c)
|
|||||||
}
|
}
|
||||||
|
|
||||||
mutex_unlock(&bc->lock);
|
mutex_unlock(&bc->lock);
|
||||||
|
memalloc_nofs_restore(flags);
|
||||||
|
|
||||||
if (bc->table_init_done)
|
if (bc->table_init_done)
|
||||||
rhashtable_destroy(&bc->table);
|
rhashtable_destroy(&bc->table);
|
||||||
|
Reference in New Issue
Block a user