On Fri, Dec 27, 2013 at 11:05:05AM -0500, Chuck Lever wrote: > Hi- > > On Dec 27, 2013, at 5:17 AM, Kinglong Mee <kinglongmee@xxxxxxxxx> wrote: > > > On 12/24/2013 01:39 AM, J. Bruce Fields wrote: > >> On Fri, Dec 20, 2013 at 05:10:42PM +0000, Gareth Williams wrote: > >>> Hi, > >>> > >>> I'm trying to run NFS with protocol version 4 only (that is, with v2 > >>> & v3 disabled) on a CentOS 6.5 install running as a KVM guest. > >>> > >>> The RedHat documentation (amongst others) states that rpcbind isn't > >>> needed with v4, but if I start nfs without rpcbind I get errors. > >> > >> I suspect the kernel code needs to be fixed to not attempt to register > >> with rpcbind n the v4-only case. (Or to attempt to register but ignore > >> any error, I'm not sure which is best.) > >> > >> And this may not be the only issue in the v4-only case. This isn't > >> really a priority for me right now, but I'd happily look at patches. > > > > Hi all, > > > > I make a patch for this problem, please have a check, thanks. > > > > From 64c1f96348213f39b9411ab25699a292edbef4ef Mon Sep 17 00:00:00 2001 > > From: Kinglong Mee <kinglongmee@xxxxxxxxx> > > Date: Fri, 27 Dec 2013 18:06:25 +0800 > > Subject: [PATCH] NFSD: supports nfsv4 service without rpcbind > > > > 1. set vs_hidden in nfsd_version4 to avoid register nfsv4 to rpcbind > > IMO we do want the NFS port registered if rpcbind is running. NFSv4 is not a hidden service, like the client's callback server which can only be discovered by a forward advertisement (SETCLIENTID). > > I think I prefer ignoring the rpcb_set error for NFSv4. Agreed. My only concern would be that there be no unnecessary delays or errors logged in the v4-only case if rpcbind isn't running. --b. > > > > 2. don't start lockd when only supports nfsv4. > > > > Reported-by: Gareth Williams <gareth@xxxxxxxxxxxxxxxxxxxx> > > Signed-off-by: Kinglong Mee <kinglongmee@xxxxxxxxx> > > --- > > fs/nfsd/netns.h | 3 +++ > > fs/nfsd/nfs4proc.c | 1 + > > fs/nfsd/nfsctl.c | 3 +++ > > fs/nfsd/nfssvc.c | 21 ++++++++++++++++----- > > 4 files changed, 23 insertions(+), 5 deletions(-) > > > > diff --git a/fs/nfsd/netns.h b/fs/nfsd/netns.h > > index 849a7c3..ae2c179 100644 > > --- a/fs/nfsd/netns.h > > +++ b/fs/nfsd/netns.h > > @@ -96,6 +96,9 @@ struct nfsd_net { > > > > bool nfsd_net_up; > > > > + bool lockd_up; > > + u32 nfsd_needs_lockd; > > + > > /* > > * Time of server startup > > */ > > diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c > > index 419572f..1496376 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_hidden = 1, > > }; > > > > /* > > diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c > > index 7f55517..8c7b0f0 100644 > > --- a/fs/nfsd/nfsctl.c > > +++ b/fs/nfsd/nfsctl.c > > @@ -575,6 +575,9 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size) > > switch(num) { > > case 2: > > case 3: > > + nfsd_vers(num, sign == '-' ? NFSD_CLEAR : NFSD_SET); > > + nn->nfsd_needs_lockd = nfsd_vers(num, NFSD_TEST); > > + break; > > case 4: > > nfsd_vers(num, sign == '-' ? NFSD_CLEAR : NFSD_SET); > > break; > > diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c > > index 760c85a..2b841d8 100644 > > --- a/fs/nfsd/nfssvc.c > > +++ b/fs/nfsd/nfssvc.c > > @@ -255,9 +255,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 (nn->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 +271,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 +285,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