Re: [nfsv4] simple NFSv4.1/4.2 test of remove while holding a delegation

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

 



On Wed, Jun 11, 2025 at 9:28 AM David Noveck <davenoveck@xxxxxxxxx> wrote:
>
>
>
> On Mon, Jun 9, 2025, 7:35 PM Rick Macklem <rick.macklem@xxxxxxxxx> wrote:
>>
>> Hi,
>>
>> I hope you don't mind a cross-post, but I thought both groups
>> might find this interesting...
>
>
> I find it interesting, but I can't speak.for either group.
>>
>>
>> I have been creating a compound RPC that does REMOVE and
>> then tries to determine if the file object has been removed and
>> I was surprised to see quite different results from the Linux knfsd
>> and Solaris 11.4 NFSv4.1/4.2 servers. I think both these servers
>> provide FH4_PERSISTENT file handles, although I suppose I
>> should check that?
>>
>> First, the test OPEN/CREATEs a regular file called "foo" (only one
>> hard link) and acquires a write delegation for it.
>> Then a compound does the following:
>> ...
>> REMOVE foo
>> PUTFH fh for foo
>> GETATTR
>>
>> For the Solaris 11.4 server, the server CB_RECALLs the
>> delegation and then replies NFS4ERR_STALE for the PUTFH above.
>> (The FreeBSD server currently does the same.)
>>
>> For a fairly recent Linux (6.12) knfsd, the above replies NFS_OK
>> with nlinks == 0 in the GETATTR reply.
>>
>> Hmm. So I've looked in RFC8881 (I'm terrible at reading it so I
>> probably missed something) and I cannot find anything that states
>> either of the above behaviours is incorrect.
>> (NFS4ERR_STALE is listed as an error code for PUTFH, but the
>> description of PUTFH only says that it sets the CFH to the fh arg.
>> It does not say anything w.r.t. the fh arg. needing to be for a file
>> that still exists.) Neither of these servers sets
>> OPEN4_RESULT_PRESERVE_UNLINKED in the OPEN reply.
>>
>> So, it looks like "file object no longer exists" is indicated either
>> by a NFS4ERR_STALE reply to either PUTFH or GETATTR
>> OR
>> by a successful reply, but with nlinks == 0 for the GETATTR reply.
>>
>> To be honest, I kinda like the Linux knfsd version, but I am wondering
>> if others think that both of these replies is correct?
>
>
> I think they are both correct.  It seems to me that an attempt to choose one of these as preferred and deprecating the other should be rejected since it unjustiably imposes a particular design choice on the server.
>>
>>
>> Also, is the CB_RECALL needed when the delegation is held by
>> the same client as the one doing the REMOVE?
>
>
> I think so.

[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