All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benny Halevy <bhalevy@tonian.com>
To: "J. Bruce Fields" <bfields@fieldses.org>,
	Tigran Mkrtchyan <tigran.mkrtchyan@desy.de>
Cc: linux-nfs@vger.kernel.org
Subject: Re: [PATCH 2/2] nfsv41: handle current stateid on open and close
Date: Tue, 06 Dec 2011 16:32:43 +0200	[thread overview]
Message-ID: <4EDE278B.6020406@tonian.com> (raw)
In-Reply-To: <20111206134014.GB8657@fieldses.org>

On 2011-12-06 15:40, J. Bruce Fields wrote:
> On Tue, Dec 06, 2011 at 02:31:14PM +0100, Tigran Mkrtchyan wrote:
>> On Tue, Dec 6, 2011 at 12:26 PM, Benny Halevy <bhalevy@tonian.com> wrote:
>>> On 2011-12-06 04:08, J. Bruce Fields wrote:
>>>> On Sun, Dec 04, 2011 at 02:42:11PM +0200, Benny Halevy wrote:
>>>>> On 2011-12-04 14:03, tigran.mkrtchyan@desy.de wrote:
>>>>>> From: Tigran Mkrtchyan <tigran.mkrtchyan@desy.de>
>>>>>>
>>>>>>
>>>>>> Signed-off-by: Tigran Mkrtchyan <tigran.mkrtchyan@desy.de>
>>>>>> ---
>>>>>>  fs/nfsd/nfs4proc.c  |    6 ++++++
>>>>>>  fs/nfsd/nfs4state.c |   26 ++++++++++++++++++++------
>>>>>>  2 files changed, 26 insertions(+), 6 deletions(-)
>>>>>>
>>>>>> diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
>>>>>> index fa38336..535aed2 100644
>>>>>> --- a/fs/nfsd/nfs4proc.c
>>>>>> +++ b/fs/nfsd/nfs4proc.c
>>>>>> @@ -400,6 +400,12 @@ nfsd4_open(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
>>>>>>      */
>>>>>>     status = nfsd4_process_open2(rqstp, &cstate->current_fh, open);
>>>>>>     WARN_ON(status && open->op_created);
>>>>>> +
>>>>>> +   if(status)
>>>>>> +           goto out;
>>>>>> +
>>>>>> +   /* set current state id */
>>>>>> +   memcpy(&cstate->current_stateid, &open->op_stateid, sizeof(stateid_t));
>>>>
>>>> That comment is a bit redundant.
>>>>
>>>>> Since this should be done for all stateid-returning operations
>>>>> I think that a cleaner approach could be to mark those as such in
>>>>> nfsd4_ops by providing a per-op function to return the operation's
>>>>> stateid.  You can then call this method from nfsd4_proc_compound()
>>>>> after the call to nfsd4_encode_operation() and when status == 0.
>>>>
>>>> So the choice is between
>>>>
>>>> +       memcpy(&cstate->current_stateid, &open->op_stateid,
>>>> sizeof(stateid_t));
>>>>
>>>> and
>>>>
>>>> +       static void get_open_stateid(stateid_t *s)
>>>> +       {
>>>> +               memcpy(s, open->op_stateid);
>>>> +       }
>>>> +
>>>> +       [OP_OPEN] = {
>>>> +               ...
>>>> +               .op_get_stateid = get_open_stateid,
>>>> +               ...
>>>> +       }
>>>>
>>>> ?
>>>>
>>>> I'm not so sure.
>>>
>>> The point is to copy the result stateid into the current_stateid
>>> in a centralized place: nfsd4_proc_compound() and do that for all
>>> stateid-modifying operations.
>>
>> Sounds good, nevertheless all operations call differently resulting
>> stateid which make it's not possible to use a unified schema.

That was the point of introducing a per-op method to get the value.

> 
> Could we just remove all (or most) of those different fields and replace
> them by cstate->current_stateid?

Hmm, that will require changing the corresponding xdr result encoding
routines to use the new field and all other use sites, but I don't think
of a good reason why this won't work.

Benny

> 
> --b.
> --
> 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

  reply	other threads:[~2011-12-06 14:32 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-12-04 12:03 nfsv41: add current_stateid processing tigran.mkrtchyan
2011-12-04 12:03 ` [PATCH 1/2] nfsv41: add current stateid into compound_state tigran.mkrtchyan
2011-12-04 12:25   ` Benny Halevy
2011-12-04 12:03 ` [PATCH 2/2] nfsv41: handle current stateid on open and close tigran.mkrtchyan
2011-12-04 12:42   ` Benny Halevy
2011-12-04 13:53     ` Tigran Mkrtchyan
2011-12-06  2:08     ` J. Bruce Fields
2011-12-06 11:26       ` Benny Halevy
2011-12-06 12:40         ` J. Bruce Fields
2011-12-06 14:30           ` Benny Halevy
2011-12-06 19:10             ` J. Bruce Fields
2011-12-06 21:47               ` Tigran Mkrtchyan
2011-12-07 14:15               ` Benny Halevy
2011-12-06 13:31         ` Tigran Mkrtchyan
2011-12-06 13:40           ` J. Bruce Fields
2011-12-06 14:32             ` Benny Halevy [this message]
2011-12-06 18:24               ` Tigran Mkrtchyan
2011-12-07 14:17                 ` Benny Halevy
2011-12-04 12:48 ` nfsv41: add current_stateid processing Benny Halevy

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=4EDE278B.6020406@tonian.com \
    --to=bhalevy@tonian.com \
    --cc=bfields@fieldses.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=tigran.mkrtchyan@desy.de \
    /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.