From: Mi Jinlong <mijinlong@cn.fujitsu.com>
To: "J. Bruce Fields" <bfields@fieldses.org>
Cc: NFS <linux-nfs@vger.kernel.org>
Subject: Re: [PATCH] nfs41: implement DESTROY_CLIENTID operation
Date: Thu, 20 Oct 2011 17:45:39 +0800 [thread overview]
Message-ID: <4E9FEDC3.2050200@cn.fujitsu.com> (raw)
In-Reply-To: <20111020093452.GD5444@fieldses.org>
J. Bruce Fields:
> On Thu, Oct 20, 2011 at 04:51:30PM +0800, Mi Jinlong wrote:
>> According to rfc5661 18.50, implement DESTROY_CLIENTID operation.
>>
>> Signed-off-by: Mi Jinlong <mijinlong@cn.fujitsu.com>
>> ---
>> fs/nfsd/nfs4proc.c | 2 +-
>> fs/nfsd/nfs4state.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
>> fs/nfsd/nfs4xdr.c | 12 +++++++++++-
>> fs/nfsd/xdr4.h | 5 +++++
>> 4 files changed, 68 insertions(+), 2 deletions(-)
>>
>> diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
>> index e807776..8412a22 100644
>> --- a/fs/nfsd/nfs4proc.c
>> +++ b/fs/nfsd/nfs4proc.c
>> @@ -1433,7 +1433,7 @@ static struct nfsd4_operation nfsd4_ops[] = {
>> .op_name = "OP_SEQUENCE",
>> },
>> [OP_DESTROY_CLIENTID] = {
>> - .op_func = NULL,
>> + .op_func = (nfsd4op_func)nfsd4_destroy_clientid,
>> .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP,
>> .op_name = "OP_DESTROY_CLIENTID",
>> },
>> diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
>> index 3787ec1..d46cbbe 100644
>> --- a/fs/nfsd/nfs4state.c
>> +++ b/fs/nfsd/nfs4state.c
>> @@ -1858,6 +1858,57 @@ out:
>> return status;
>> }
>>
>> +static inline bool has_resources(struct nfs4_client *clp)
>> +{
>> + return !list_empty(&clp->cl_openowners)
>> + || !list_empty(&clp->cl_delegations)
>> + || !list_empty(&clp->cl_sessions)
>> + || !list_empty(&clp->cl_callbacks);
>
> I don't think the existance of callbacks should prevent destroying the
> client.
It's my fault.
>
>> +}
>> +
>> +__be32
>> +nfsd4_destroy_clientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, struct nfsd4_destroy_clientid *dc)
>> +{
>> + struct nfs4_client *conf, *unconf, *clp;
>> + int status = 0;
>> +
>> + nfs4_lock_state();
>> + unconf = find_unconfirmed_client(&dc->clientid);
>> + conf = find_confirmed_client(&dc->clientid);
>> +
>> + if (conf) {
>> + clp = conf;
>> +
>> + if (!is_client_expired(conf) && has_resources(conf)) {
>> + status = nfserr_clientid_busy;
>> + goto out;
>> + }
>> +
>> + /*
>> + * DESTROY_CLIENTID MAY be preceded with a SEQUENCE operation as
>> + * long as the client ID derived from the session ID of SEQUENCE
>> + * is not the same as the client ID to be destroyed.
>> + * If the client IDs are the same, then the server MUST return
>> + * NFS4ERR_CLIENTID_BUSY.
>> + */
>
> Let's just replace that comment by:
>
> /* rfc 551 18.50.3: */
>
> (I agree that it's useful to have a reference to explain where this
> requirement came from, but I don't think it's necessary to write out the
> whole thing, as the behavior is obvious enough from the following code.)
Yes.
A new version will be post.
thanks,
Mi Jinlong
next prev parent reply other threads:[~2011-10-20 9:40 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-20 8:51 [PATCH] nfs41: implement DESTROY_CLIENTID operation Mi Jinlong
2011-10-20 9:34 ` J. Bruce Fields
2011-10-20 9:45 ` Mi Jinlong [this message]
2011-10-20 9:51 ` [PATCH v2] " Mi Jinlong
2011-10-20 12:33 ` J. Bruce Fields
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=4E9FEDC3.2050200@cn.fujitsu.com \
--to=mijinlong@cn.fujitsu.com \
--cc=bfields@fieldses.org \
--cc=linux-nfs@vger.kernel.org \
/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.