Message ID | 20230111161959.178472-1-jlayton@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | nfsd: move reply cache initialization into nfsd startup | expand |
> On Jan 11, 2023, at 11:19 AM, Jeff Layton <jlayton@kernel.org> wrote: > > There's no need to start the reply cache before nfsd is up and running, > and doing so means that we register a shrinker for every net namespace > instead of just the ones where nfsd is running. > > Move it to the per-net nfsd startup instead. > > Reported-by: Dai Ngo <dai.ngo@oracle.com> > Signed-off-by: Jeff Layton <jlayton@kernel.org> > --- > fs/nfsd/nfsctl.c | 8 -------- > fs/nfsd/nfssvc.c | 10 +++++++++- > 2 files changed, 9 insertions(+), 9 deletions(-) > > diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c > index c2577ee7ffb2..f2a0d6ac88df 100644 > --- a/fs/nfsd/nfsctl.c > +++ b/fs/nfsd/nfsctl.c > @@ -1458,16 +1458,11 @@ static __net_init int nfsd_init_net(struct net *net) > nn->nfsd_versions = NULL; > nn->nfsd4_minorversions = NULL; > nfsd4_init_leases_net(nn); > - retval = nfsd_reply_cache_init(nn); > - if (retval) > - goto out_cache_error; > get_random_bytes(&nn->siphash_key, sizeof(nn->siphash_key)); > seqlock_init(&nn->writeverf_lock); > > return 0; > > -out_cache_error: > - nfsd_idmap_shutdown(net); > out_idmap_error: > nfsd_export_shutdown(net); > out_export_error: > @@ -1476,9 +1471,6 @@ static __net_init int nfsd_init_net(struct net *net) > > static __net_exit void nfsd_exit_net(struct net *net) > { > - struct nfsd_net *nn = net_generic(net, nfsd_net_id); > - > - nfsd_reply_cache_shutdown(nn); > nfsd_idmap_shutdown(net); > nfsd_export_shutdown(net); > nfsd_netns_free_versions(net_generic(net, nfsd_net_id)); > diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c > index ff10c46b62d3..fe5e4f73bb98 100644 > --- a/fs/nfsd/nfssvc.c > +++ b/fs/nfsd/nfssvc.c > @@ -427,16 +427,23 @@ static int nfsd_startup_net(struct net *net, const struct cred *cred) > ret = nfsd_file_cache_start_net(net); > if (ret) > goto out_lockd; > - ret = nfs4_state_start_net(net); > + > + ret = nfsd_reply_cache_init(nn); > if (ret) > goto out_filecache; > > + ret = nfs4_state_start_net(net); > + if (ret) > + goto out_reply_cache; > + > #ifdef CONFIG_NFSD_V4_2_INTER_SSC > nfsd4_ssc_init_umount_work(nn); > #endif > nn->nfsd_net_up = true; > return 0; > > +out_reply_cache: > + nfsd_reply_cache_shutdown(nn); > out_filecache: > nfsd_file_cache_shutdown_net(net); > out_lockd: > @@ -454,6 +461,7 @@ static void nfsd_shutdown_net(struct net *net) > struct nfsd_net *nn = net_generic(net, nfsd_net_id); > > nfs4_state_shutdown_net(net); > + nfsd_reply_cache_shutdown(nn); > nfsd_file_cache_shutdown_net(net); > if (nn->lockd_up) { > lockd_down(net); > -- > 2.39.0 > This was applied to nfsd's for-next. Thank you! -- Chuck Lever
diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c index c2577ee7ffb2..f2a0d6ac88df 100644 --- a/fs/nfsd/nfsctl.c +++ b/fs/nfsd/nfsctl.c @@ -1458,16 +1458,11 @@ static __net_init int nfsd_init_net(struct net *net) nn->nfsd_versions = NULL; nn->nfsd4_minorversions = NULL; nfsd4_init_leases_net(nn); - retval = nfsd_reply_cache_init(nn); - if (retval) - goto out_cache_error; get_random_bytes(&nn->siphash_key, sizeof(nn->siphash_key)); seqlock_init(&nn->writeverf_lock); return 0; -out_cache_error: - nfsd_idmap_shutdown(net); out_idmap_error: nfsd_export_shutdown(net); out_export_error: @@ -1476,9 +1471,6 @@ static __net_init int nfsd_init_net(struct net *net) static __net_exit void nfsd_exit_net(struct net *net) { - struct nfsd_net *nn = net_generic(net, nfsd_net_id); - - nfsd_reply_cache_shutdown(nn); nfsd_idmap_shutdown(net); nfsd_export_shutdown(net); nfsd_netns_free_versions(net_generic(net, nfsd_net_id)); diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c index ff10c46b62d3..fe5e4f73bb98 100644 --- a/fs/nfsd/nfssvc.c +++ b/fs/nfsd/nfssvc.c @@ -427,16 +427,23 @@ static int nfsd_startup_net(struct net *net, const struct cred *cred) ret = nfsd_file_cache_start_net(net); if (ret) goto out_lockd; - ret = nfs4_state_start_net(net); + + ret = nfsd_reply_cache_init(nn); if (ret) goto out_filecache; + ret = nfs4_state_start_net(net); + if (ret) + goto out_reply_cache; + #ifdef CONFIG_NFSD_V4_2_INTER_SSC nfsd4_ssc_init_umount_work(nn); #endif nn->nfsd_net_up = true; return 0; +out_reply_cache: + nfsd_reply_cache_shutdown(nn); out_filecache: nfsd_file_cache_shutdown_net(net); out_lockd: @@ -454,6 +461,7 @@ static void nfsd_shutdown_net(struct net *net) struct nfsd_net *nn = net_generic(net, nfsd_net_id); nfs4_state_shutdown_net(net); + nfsd_reply_cache_shutdown(nn); nfsd_file_cache_shutdown_net(net); if (nn->lockd_up) { lockd_down(net);
There's no need to start the reply cache before nfsd is up and running, and doing so means that we register a shrinker for every net namespace instead of just the ones where nfsd is running. Move it to the per-net nfsd startup instead. Reported-by: Dai Ngo <dai.ngo@oracle.com> Signed-off-by: Jeff Layton <jlayton@kernel.org> --- fs/nfsd/nfsctl.c | 8 -------- fs/nfsd/nfssvc.c | 10 +++++++++- 2 files changed, 9 insertions(+), 9 deletions(-)