Message ID | 20201021143415.GA27122@fieldses.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | NFSv4.2: fix failure to unregister shrinker | expand |
Looks like this patch got lost, do you need me to resend? I should also have added a stable cc and a Fixes: 95ad37f90c33 "NFSv4.2: add client side xattr caching." --b. On Wed, Oct 21, 2020 at 10:34:15AM -0400, bfields wrote: > From: "J. Bruce Fields" <bfields@redhat.com> > > 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 <bugs-a17@moonlit-rail.com> > Tested-By: Kris Karas <bugs-a17@moonlit-rail.com> > Signed-off-by: J. Bruce Fields <bfields@redhat.com> > --- > fs/nfs/nfs42xattr.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/fs/nfs/nfs42xattr.c b/fs/nfs/nfs42xattr.c > index 86777996cfec..55b44a42d625 100644 > --- a/fs/nfs/nfs42xattr.c > +++ b/fs/nfs/nfs42xattr.c > @@ -1048,8 +1048,10 @@ int __init nfs4_xattr_cache_init(void) > > 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); > -- > 2.26.2 >
No need to resend! I'll make sure the fixes & cc line get added to the commit On Thu, Nov 12, 2020 at 9:03 AM J. Bruce Fields <bfields@fieldses.org> wrote: > > Looks like this patch got lost, do you need me to resend? > > I should also have added a stable cc and a > > Fixes: 95ad37f90c33 "NFSv4.2: add client side xattr caching." > > --b. > > On Wed, Oct 21, 2020 at 10:34:15AM -0400, bfields wrote: > > From: "J. Bruce Fields" <bfields@redhat.com> > > > > 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 <bugs-a17@moonlit-rail.com> > > Tested-By: Kris Karas <bugs-a17@moonlit-rail.com> > > Signed-off-by: J. Bruce Fields <bfields@redhat.com> > > --- > > fs/nfs/nfs42xattr.c | 2 ++ > > 1 file changed, 2 insertions(+) > > > > diff --git a/fs/nfs/nfs42xattr.c b/fs/nfs/nfs42xattr.c > > index 86777996cfec..55b44a42d625 100644 > > --- a/fs/nfs/nfs42xattr.c > > +++ b/fs/nfs/nfs42xattr.c > > @@ -1048,8 +1048,10 @@ int __init nfs4_xattr_cache_init(void) > > > > 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); > > -- > > 2.26.2 > >
diff --git a/fs/nfs/nfs42xattr.c b/fs/nfs/nfs42xattr.c index 86777996cfec..55b44a42d625 100644 --- a/fs/nfs/nfs42xattr.c +++ b/fs/nfs/nfs42xattr.c @@ -1048,8 +1048,10 @@ int __init nfs4_xattr_cache_init(void) 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);