From: Kinglong Mee <kinglongmee@gmail.com>
To: Chuck Lever <chuck.lever@oracle.com>
Cc: "J.,Bruce Fields" <bfields@fieldses.org>,
Gareth Williams <gareth@garethwilliams.me.uk>,
Linux NFS Mailing List <linux-nfs@vger.kernel.org>,
trond.myklebust@primarydata.com
Subject: Re: [PATCH 2/2] NFSD: supports nfsv4 service without rpcbind
Date: Tue, 31 Dec 2013 11:18:22 +0800 [thread overview]
Message-ID: <52C2377E.8040006@gmail.com> (raw)
In-Reply-To: <68E6D30F-B2D6-4919-9748-E7F1162AC3B7@oracle.com>
On 12/31/2013 01:54 AM, Chuck Lever wrote:
>
> On Dec 30, 2013, at 6:25 AM, Kinglong Mee <kinglongmee@gmail.com> wrote:
>
>> 1. set vs_ignore_err for nfsd_version4
>> 2. don't start lockd when only supports nfsv4
>>
>> Signed-off-by: Kinglong Mee <kinglongmee@gmail.com>
>> ---
>> 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".
Make sense.
Thanks for you suggestion.
>
>> };
>>
>> /*
>> 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?
In the latest kernel (3.13), nfsd_versions records the version of nfsd which being started,
nfsd_version records the version of nfsd which can be supported by codes.
In function named nfsd_vers, when setting a version of nfsd, nfsd_versions[vers] will be signed
to nfsd_version[vers], in contrast, when clearing, nfsd_versions[vers] will be signed to NULL.
So, we can check nfsd_versions[vers] directly for according version.
thanks,
Kinglong Mee
>
>> +
>> 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@vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
> --
> Chuck Lever
> chuck[dot]lever[at]oracle[dot]com
>
>
>
>
next prev parent reply other threads:[~2013-12-31 3:18 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-20 17:10 Question ref Running NFS at V4 Only Gareth Williams
2013-12-23 17:39 ` J. Bruce Fields
2013-12-27 10:17 ` Kinglong Mee
2013-12-27 16:05 ` Chuck Lever
2013-12-27 18:43 ` J.;Bruce Fields
2013-12-27 19:40 ` Chuck Lever
[not found] ` <6E281EC9-49CB-4BDA-BDF3-7A6F4B703156@gmail.com>
2013-12-29 6:39 ` Kinglong Mee
[not found] ` <5D65FDE6-D1AB-442C-BFD8-141AB87FF321@gmail.com>
2013-12-29 9:11 ` Kinglong Mee
2013-12-30 11:22 ` Kinglong Mee
2013-12-30 11:24 ` [PATCH 1/2] SUNRPC: supports ignoring error from svc_register Kinglong Mee
2013-12-30 11:25 ` [PATCH 2/2] NFSD: supports nfsv4 service without rpcbind Kinglong Mee
2013-12-30 17:54 ` Chuck Lever
2013-12-31 3:18 ` Kinglong Mee [this message]
2013-12-31 5:17 ` [PATCH 1/2 v2] SUNRPC/NFSD: Supports new option for ignoring the result of svc_register Kinglong Mee
2013-12-31 5:17 ` [PATCH 2/2 v2] NFSD: Don't start lockd when only NFSv4 is running Kinglong Mee
2014-01-03 23:18 ` J.,Bruce Fields
2014-01-06 3:28 ` NFSD: fix compile warning without CONFIG_NFSD_V3 Kinglong Mee
2014-01-06 18:44 ` J.,Bruce Fields
2013-12-31 19:39 ` [PATCH 1/4] SUNRPC: Ensure xprt_connect_status handles all potential connection errors Trond Myklebust
2013-12-31 19:39 ` [PATCH 2/4] SUNRPC: Handle connect errors ECONNABORTED and EHOSTUNREACH Trond Myklebust
2013-12-31 19:39 ` [PATCH 3/4] SUNRPC: Report connection error values to rpc_tasks on the pending queue Trond Myklebust
2013-12-31 19:39 ` [PATCH 4/4] SUNRPC: Add tracepoint for socket errors Trond Myklebust
2014-01-05 19:54 ` J. Bruce Fields
2014-01-05 20:19 ` Trond Myklebust
2014-01-02 4:52 ` [PATCH 1/4] SUNRPC: Ensure xprt_connect_status handles all potential connection errors Kinglong Mee
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52C2377E.8040006@gmail.com \
--to=kinglongmee@gmail.com \
--cc=bfields@fieldses.org \
--cc=chuck.lever@oracle.com \
--cc=gareth@garethwilliams.me.uk \
--cc=linux-nfs@vger.kernel.org \
--cc=trond.myklebust@primarydata.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.