diff options
author | J. Bruce Fields <[email protected]> | 2020-10-21 10:34:15 -0400 |
---|---|---|
committer | Anna Schumaker <[email protected]> | 2020-11-12 10:40:02 -0500 |
commit | 70438afbf17e5194dd607dd17759560a363b7bb4 (patch) | |
tree | 9297e9ccdae46bcb8c44489e83e212ed7c525ba9 | |
parent | 3fc2bfa365311c6ef3e4411437786a54a911d9a9 (diff) |
NFSv4.2: fix failure to unregister shrinker
We forgot to unregister the nfs4_xattr_large_entry_shrinker.
That leaves the global list of shrinkers corrupted after unload of the
nfs module, after which possibly unrelated code that calls
register_shrinker() or unregister_shrinker() gets a BUG() with
"supervisor write access in kernel mode".
And similarly for the nfs4_xattr_large_entry_lru.
Reported-by: Kris Karas <[email protected]>
Tested-By: Kris Karas <[email protected]>
Fixes: 95ad37f90c33 "NFSv4.2: add client side xattr caching."
Signed-off-by: J. Bruce Fields <[email protected]>
CC: [email protected]
Signed-off-by: Anna Schumaker <[email protected]>
-rw-r--r-- | fs/nfs/nfs42xattr.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/nfs/nfs42xattr.c b/fs/nfs/nfs42xattr.c index b51424ff8159..6c2ce799150f 100644 --- a/fs/nfs/nfs42xattr.c +++ b/fs/nfs/nfs42xattr.c @@ -1047,8 +1047,10 @@ out4: void nfs4_xattr_cache_exit(void) { + unregister_shrinker(&nfs4_xattr_large_entry_shrinker); unregister_shrinker(&nfs4_xattr_entry_shrinker); unregister_shrinker(&nfs4_xattr_cache_shrinker); + list_lru_destroy(&nfs4_xattr_large_entry_lru); list_lru_destroy(&nfs4_xattr_entry_lru); list_lru_destroy(&nfs4_xattr_cache_lru); kmem_cache_destroy(nfs4_xattr_cache_cachep); |