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:
Kent Overstreet 2020-10-11 16:33:49 -04:00 committed by Kent Overstreet
parent 9ba2eb25f0
commit 5d0b7f906a

View file

@ -349,11 +349,13 @@ void bch2_fs_btree_cache_exit(struct bch_fs *c)
{
struct btree_cache *bc = &c->btree_cache;
struct btree *b;
unsigned i;
unsigned i, flags;
if (bc->shrink.list.next)
unregister_shrinker(&bc->shrink);
/* vfree() can allocate memory: */
flags = memalloc_nofs_save();
mutex_lock(&bc->lock);
#ifdef CONFIG_BCACHEFS_DEBUG
@ -389,6 +391,7 @@ void bch2_fs_btree_cache_exit(struct bch_fs *c)
}
mutex_unlock(&bc->lock);
memalloc_nofs_restore(flags);
if (bc->table_init_done)
rhashtable_destroy(&bc->table);