Re: Question ref Running NFS at V4 Only

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.


> 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




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux