Hi Bruce- > On Feb 3, 2021, at 11:42 AM, J. Bruce Fields <bfields@xxxxxxxxxxxx> wrote: > > From: "J. Bruce Fields" <bfields@xxxxxxxxxx> > > These pernet operations may depend on stuff set up or torn down in the > module init/exit functions. And they may be called at any time in > between. So it makes more sense for them to be the last to be > registered in the init function, and the first to be unregistered in the > exit function. > > In particular, without this, the drc slab is being destroyed before all > the per-net drcs are shut down, resulting in an "Objects remaining in > nfsd_drc on __kmem_cache_shutdown()" warning in exit_nfsd. > > Reported-by: Zhi Li <yieli@xxxxxxxxxx> > Fixes: 3ba75830ce17 "nfsd4: drc containerization" > Signed-off-by: J. Bruce Fields <bfields@xxxxxxxxxx> I can't tell how urgent this is. Does it belong in 5.11-rc? > --- > fs/nfsd/nfsctl.c | 14 +++++++------- > 1 file changed, 7 insertions(+), 7 deletions(-) > > diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c > index f6d5d783f4a4..0759e589ab52 100644 > --- a/fs/nfsd/nfsctl.c > +++ b/fs/nfsd/nfsctl.c > @@ -1522,12 +1522,9 @@ static int __init init_nfsd(void) > int retval; > printk(KERN_INFO "Installing knfsd (copyright (C) 1996 okir@xxxxxxxxxxxx).\n"); > > - retval = register_pernet_subsys(&nfsd_net_ops); > - if (retval < 0) > - return retval; > retval = register_cld_notifier(); > if (retval) > - goto out_unregister_pernet; > + return retval; > retval = nfsd4_init_slabs(); > if (retval) > goto out_unregister_notifier; > @@ -1544,9 +1541,14 @@ static int __init init_nfsd(void) > goto out_free_lockd; > retval = register_filesystem(&nfsd_fs_type); > if (retval) > + goto out_free_exports; > + retval = register_pernet_subsys(&nfsd_net_ops); > + if (retval < 0) > goto out_free_all; > return 0; > out_free_all: > + unregister_pernet_subsys(&nfsd_net_ops); > +out_free_exports: > remove_proc_entry("fs/nfs/exports", NULL); > remove_proc_entry("fs/nfs", NULL); > out_free_lockd: > @@ -1559,13 +1561,12 @@ static int __init init_nfsd(void) > nfsd4_free_slabs(); > out_unregister_notifier: > unregister_cld_notifier(); > -out_unregister_pernet: > - unregister_pernet_subsys(&nfsd_net_ops); > return retval; > } > > static void __exit exit_nfsd(void) > { > + unregister_pernet_subsys(&nfsd_net_ops); > nfsd_drc_slab_free(); > remove_proc_entry("fs/nfs/exports", NULL); > remove_proc_entry("fs/nfs", NULL); > @@ -1575,7 +1576,6 @@ static void __exit exit_nfsd(void) > nfsd4_exit_pnfs(); > unregister_filesystem(&nfsd_fs_type); > unregister_cld_notifier(); > - unregister_pernet_subsys(&nfsd_net_ops); > } > > MODULE_AUTHOR("Olaf Kirch <okir@xxxxxxxxxxxx>"); > -- > 2.29.2 > -- Chuck Lever