diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2020-10-11 16:33:49 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2020-10-21 15:33:15 -0400 |
commit | abbce614e60e80c447ccb79bfd144f0fb7c6f470 (patch) | |
tree | bb1e43ee37277d4f9cf8cab8ae3c6bc2334a0ae3 | |
parent | 3e2d90f59e50b785d5b4f65c503e1abd79a7920c (diff) |
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>
-rw-r--r-- | fs/bcachefs/btree_cache.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/bcachefs/btree_cache.c b/fs/bcachefs/btree_cache.c index 736671112861..3a43b8ecef27 100644 --- a/fs/bcachefs/btree_cache.c +++ b/fs/bcachefs/btree_cache.c @@ -348,11 +348,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 @@ -388,6 +390,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); |