On Dec 30, 2013, at 6:25 AM, Kinglong Mee <kinglongmee@xxxxxxxxx> wrote: > 1. set vs_ignore_err for nfsd_version4 > 2. don't start lockd when only supports nfsv4 > > Signed-off-by: Kinglong Mee <kinglongmee@xxxxxxxxx> > --- > fs/nfsd/netns.h | 1 + > fs/nfsd/nfs4proc.c | 1 + > fs/nfsd/nfssvc.c | 26 +++++++++++++++++++++----- > 3 files changed, 23 insertions(+), 5 deletions(-) > > diff --git a/fs/nfsd/netns.h b/fs/nfsd/netns.h > index 849a7c3..d32b3aa 100644 > --- a/fs/nfsd/netns.h > +++ b/fs/nfsd/netns.h > @@ -95,6 +95,7 @@ struct nfsd_net { > time_t nfsd4_grace; > > bool nfsd_net_up; > + bool lockd_up; > > /* > * Time of server startup > diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c > index 419572f..9320986 100644 > --- a/fs/nfsd/nfs4proc.c > +++ b/fs/nfsd/nfs4proc.c > @@ -1881,6 +1881,7 @@ struct svc_version nfsd_version4 = { > .vs_proc = nfsd_procedures4, > .vs_dispatch = nfsd_dispatch, > .vs_xdrsize = NFS4_SVC_XDRSIZE, > + .vs_ignore_err = 1, It's better, I think, to include this hunk in 1/1. That way, that one patch can be merged into stable, or cherry-picked by a distribution. Also, just a nit: ".vs_ignore_err" is a rather generic name. Something more specific like ".vs_rpcb_optnl" would be nicer, or reverse the logic and call it ".vs_rpcb_needed". > }; > > /* > diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c > index 760c85a..55b5b57 100644 > --- a/fs/nfsd/nfssvc.c > +++ b/fs/nfsd/nfssvc.c > @@ -241,6 +241,11 @@ static void nfsd_shutdown_generic(void) > nfsd_racache_shutdown(); > } > > +static bool nfsd_needs_lockd(void) > +{ > + return (nfsd_versions[2] != NULL) || (nfsd_versions[3] != NULL); > +} How does this logic know which version of nfsd is being started? > + > static int nfsd_startup_net(int nrservs, struct net *net) > { > struct nfsd_net *nn = net_generic(net, nfsd_net_id); > @@ -255,9 +260,14 @@ static int nfsd_startup_net(int nrservs, struct net *net) > ret = nfsd_init_socks(net); > if (ret) > goto out_socks; > - ret = lockd_up(net); > - if (ret) > - goto out_socks; > + > + if (nfsd_needs_lockd() && !nn->lockd_up) { > + ret = lockd_up(net); > + if (ret) > + goto out_socks; > + nn->lockd_up = 1; > + } > + > ret = nfs4_state_start_net(net); > if (ret) > goto out_lockd; > @@ -266,7 +276,10 @@ static int nfsd_startup_net(int nrservs, struct net *net) > return 0; > > out_lockd: > - lockd_down(net); > + if (nn->lockd_up) { > + lockd_down(net); > + nn->lockd_up = 0; > + } > out_socks: > nfsd_shutdown_generic(); > return ret; > @@ -277,7 +290,10 @@ static void nfsd_shutdown_net(struct net *net) > struct nfsd_net *nn = net_generic(net, nfsd_net_id); > > nfs4_state_shutdown_net(net); > - lockd_down(net); > + if (nn->lockd_up) { > + lockd_down(net); > + nn->lockd_up = 0; > + } > nn->nfsd_net_up = false; > nfsd_shutdown_generic(); > } > -- > 1.8.4.2 > -- > To unsubscribe from this list: send the line "unsubscribe linux-nfs" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Chuck Lever chuck[dot]lever[at]oracle[dot]com -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html