diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2020-10-15 21:48:58 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:08:44 -0400 |
commit | 97c0e19502549c0501581f9efff45022a10be2aa (patch) | |
tree | 6f56b10433fb3f7f40a6d13050ad0b735bbe1418 /fs/bcachefs/btree_cache.c | |
parent | 505b7a4c2844d8ee0004ab905874513776bc14da (diff) |
bcachefs: Fix another lockdep splat
vfree() can allocate memory, so we need to call memalloc_nofs_save().
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/btree_cache.c')
-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 5d1a7f138a54..90d884b18b70 100644 --- a/fs/bcachefs/btree_cache.c +++ b/fs/bcachefs/btree_cache.c @@ -253,7 +253,7 @@ static unsigned long bch2_btree_cache_scan(struct shrinker *shrink, unsigned long can_free; unsigned long touched = 0; unsigned long freed = 0; - unsigned i; + unsigned i, flags; if (btree_shrinker_disabled(c)) return SHRINK_STOP; @@ -264,6 +264,8 @@ static unsigned long bch2_btree_cache_scan(struct shrinker *shrink, else if (!mutex_trylock(&bc->lock)) return -1; + flags = memalloc_nofs_save(); + /* * It's _really_ critical that we don't free too many btree nodes - we * have to always leave ourselves a reserve. The reserve is how we @@ -327,6 +329,7 @@ restart: clear_btree_node_accessed(b); } + memalloc_nofs_restore(flags); mutex_unlock(&bc->lock); out: return (unsigned long) freed * btree_pages(c); |