Re: [PATCH] nfs4: flex_file: ignore synthetic uid/gid for tightly coupled DSes

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

 




----- Original Message -----
> From: "Rick Macklem" <rmacklem@xxxxxxxxxxx>
> To: "Tom Haynes" <loghyr@xxxxxxxxx>, "Tigran Mkrtchyan" <tigran.mkrtchyan@xxxxxxx>
> Cc: "linux-nfs" <linux-nfs@xxxxxxxxxxxxxxx>, "trondmy" <trondmy@xxxxxxxxxxxxxxx>, "Anna Schumaker"
> <Anna.Schumaker@xxxxxxxxxx>
> Sent: Monday, August 20, 2018 11:16:22 PM
> Subject: Re: [PATCH] nfs4: flex_file: ignore synthetic uid/gid for tightly coupled DSes

> Tom Haynes wrote:
>>> On Aug 20, 2018, at 1:41 PM, Mkrtchyan, Tigran <tigran.mkrtchyan@xxxxxxx> wrote:
>>>
>>> Hi Rick,
>>>
>>> draft-19 says:
>>>
>>>   For tight coupling, ffds_stateid provides the stateid to be used by
>>>   the client to access the file.  For loose coupling and a NFSv4
>>>   storage device, the client will have to use an anonymous stateid to
>>>   perform I/O on the storage device.  With no control protocol, the
>>>   metadata server stateid can not be used to provide a global stateid
>>>   model.  Thus the server MUST set the ffds_stateid to be the anonymous
>>>   stateid.
>>>
>>> To me, the last sentence sounds like a clear statement, that it's server
>>> responsibility to provide either global or anonymous stateid and client
>>> should just use it as is. IOW,
>>>
>>> +     stateid = nfs4_ff_layout_select_ds_stateid(lseg, idx);
>>> +     if (stateid)
>>> +             nfs4_stateid_copy(&hdr->args.stateid, stateid);
>>>
> If you do this unconditionally, I think you can get rid of the code that looks
> like:
>             if (nfs4_set_rw_stateid(&hdr->args.stateid, hdr->args.context,
>                                          hdr->args.lock_context, FMODE_READ) == -EIO)
>                            rpc_exit(task, -EIO);  /* lost lock, terminate I/O */
> at the end of ff_layout_read_prepare_v4() and similar but with FMODE_WRITE
> at the end of ff_layout_write_prepare_v4().
> 
>>>
>>> must happen independent from ds being loose or tight coupled. As our DSes
>>> use the same stateid's as MDS, we did see that provided stateid is not used.
>>>
>>> Trond, Tom, can you comment on it?
>>
>>
>>Yes, I agree, the server always provides the stateid.
> Sure. Since the above states that the loosely coupled server must fill it in as
> the anonymous stated, the client will end up using the anonymous stated
> for loosely coupled, whether it uses ffds_stateid or just sets it to the
> anonymous stated. (Unpatched, the client always use the anonymous stated,
> including for tightly coupled.)

I am not sure that's true, as our DSes will reject such IO requests. And we
do use flex_files in production:

Frame 96: 264 bytes on wire (2112 bits), 264 bytes captured (2112 bits) on interface 0
Linux cooked capture
Internet Protocol Version 4, Src: 131.169.xx, Dst: 131.169.xx
Transmission Control Protocol, Src Port: 946, Dst Port: 32049, Seq: 925, Ack: 569, Len: 196
Remote Procedure Call, Type:Call XID:0xa09b9261
Network File System, Ops(3): SEQUENCE, PUTFH, READ
    [Program Version: 4]
    [V4 Procedure: COMPOUND (1)]
    Tag: <EMPTY>
        length: 0
        contents: <EMPTY>
    minorversion: 1
    Operations (count: 3): SEQUENCE, PUTFH, READ
        Opcode: SEQUENCE (53)
            sessionid: 5b7b31b9000000060000000000000001
            seqid: 0x00000002
            slot id: 0
            high slot id: 0
            cache this?: No
        Opcode: PUTFH (22)
            FileHandle
                length: 27
                [hash (CRC-32): 0x4c4a3909]
                FileHandle: 01caffee000000008d61f80c000d00000800000000002887...
        Opcode: READ (25)
            StateID
                [StateID Hash: 0x71b8]
                StateID seqid: 0
                StateID Other: 5b7b31b60000000500000001
                [StateID Other hash: 0xbecf]
            offset: 0
            count: 1015
    [Main Opcode: READ (25)]


Tigran.

> 
> Doing it unconditionally makes the patch even simpler.
> 
> rick
> 
>>
>> Thanks,
>>    Tigran.
>>
>> ----- Original Message -----
>>> From: "Rick Macklem" <rmacklem@xxxxxxxxxxx>
>>> To: "Tigran Mkrtchyan" <tigran.mkrtchyan@xxxxxxx>, "linux-nfs"
>>> <linux-nfs@xxxxxxxxxxxxxxx>
>>> Cc: trondmy@xxxxxxxxxxxxxxx, "Anna Schumaker" <Anna.Schumaker@xxxxxxxxxx>
>>> Sent: Monday, August 20, 2018 3:18:00 PM
>>> Subject: Re: [PATCH] nfs4: flex_file: ignore synthetic uid/gid for tightly
>>> coupled DSes
>>
>>> I just put a patch for the stated part (stripped out my version of the cred
>>> stuff, which I noticed I missed commit in it;) so it might be easier to read.
>>> It is here:
>>> http://people.freebsd.org/~rmacklem/flexfilestateid.patch
>>>
>>> Thanks for doing this, rick
>>>
>>> ________________________________________
>>> From: linux-nfs-owner@xxxxxxxxxxxxxxx <linux-nfs-owner@xxxxxxxxxxxxxxx> on
>>> behalf of Rick Macklem <rmacklem@xxxxxxxxxxx>
>>> Sent: Monday, August 20, 2018 8:51:14 AM
>>> To: Tigran Mkrtchyan; linux-nfs@xxxxxxxxxxxxxxx
>>> Cc: trondmy@xxxxxxxxxxxxxxx; Anna.Schumaker@xxxxxxxxxx
>>> Subject: Re: [PATCH] nfs4: flex_file: ignore synthetic uid/gid for tightly
>>> coupled DSes
>>>
>>> Thanks. I'll test this later to-day. (I did a slightly more complex version
>>> of the fix outside of the ff_layout_get_ds_cred() call, but yours is
>>> definitely simpler).
>>>
>>> There is also the "stateid", which I believe is supposed to be the one in
>>> the layout for the tightly coupled case (for NFSv4 I/O ops to the DS).
>>> My patch is here and has the changes for stated as well as cred.
>>>
>>> http://people.freebsd.org/~rmacklem/flexfile.patch
>>> (Sorry, I don't know git;-)
>>>
>>> Thanks for doing this and I'll post if my testing finds problems, rick
>>>
>>>
>>> ________________________________________
>>> From: linux-nfs-owner@xxxxxxxxxxxxxxx <linux-nfs-owner@xxxxxxxxxxxxxxx> on
>>> behalf of Tigran Mkrtchyan <tigran.mkrtchyan@xxxxxxx>
>>> Sent: Monday, August 20, 2018 2:56:08 AM
>>> To: linux-nfs@xxxxxxxxxxxxxxx
>>> Cc: trondmy@xxxxxxxxxxxxxxx; Anna.Schumaker@xxxxxxxxxx; Tigran Mkrtchyan
>>> Subject: [PATCH] nfs4: flex_file: ignore synthetic uid/gid for tightly coupled
>>> DSes
>>>
>>> for tightly coupled DSes client must ignore provided synthetic uid and
>>> gid as stated in draft-ietf-nfsv4-flex-files-19#section-5.1.
>>>
>>> Signed-off-by: Tigran Mkrtchyan <tigran.mkrtchyan@xxxxxxx>
>>> ---
>>> fs/nfs/flexfilelayout/flexfilelayoutdev.c | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c
>>> b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
>>> index d62279d3fc5d..290625cfd369 100644
>>> --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c
>>> +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
>>> @@ -452,7 +452,7 @@ ff_layout_get_ds_cred(struct pnfs_layout_segment *lseg, u32
>>> ds_idx,
>>>       struct nfs4_ff_layout_mirror *mirror = FF_LAYOUT_COMP(lseg, ds_idx);
>>>       struct rpc_cred *cred;
>>>
>>> -       if (mirror) {
>>> +       if (mirror && !mirror->mirror_ds->ds_versions[0].tightly_coupled) {
>>>               cred = ff_layout_get_mirror_cred(mirror, lseg->pls_range.iomode);
>>>               if (!cred)
>>>                       cred = get_rpccred(mdscred);
>>> --
> >> 2.17.1



[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