Re: [nfsv4] Re: 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 Tue, 10 Jun 2025 at 02:17, Dai Ngo
<dai.ngo=40oracle.com@xxxxxxxxxxxxxx> wrote:
>
> On 6/9/25 4:35 PM, Rick Macklem wrote:
> > Hi,
> >
> > I hope you don't mind a cross-post, but I thought both groups
> > might find this interesting...
> >
> > 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?
> >
> > Also, is the CB_RECALL needed when the delegation is held by
> > the same client as the one doing the REMOVE?
>
> The Linux NFSD detects the delegation belongs to the same client that
> causes the conflict (due to REMOVE) and skips the CB_RECALL. This is
> an optimization based on the assumption that the client would handle
> the conflict locally.

Does Linux nfsd have a setting to turn such optimizations OFF (all of them)?

Ced
-- 
Cedric Blancher <cedric.blancher@xxxxxxxxx>
[https://plus.google.com/u/0/+CedricBlancher/]
Institute Pasteur




[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