Re: [nfsv4] RFC: New DelegReturn_NoFH operation for NFSv4.2?

Rick Macklem <rick.macklem@gmail.com> Fri, 19 April 2024 00:28 UTC

Return-Path: <rick.macklem@gmail.com>
X-Original-To: nfsv4@ietfa.amsl.com
Delivered-To: nfsv4@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id A5C0AC14F699 for <nfsv4@ietfa.amsl.com>; Thu, 18 Apr 2024 17:28:37 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -7.096
X-Spam-Level:
X-Spam-Status: No, score=-7.096 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_HI=-5, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id cYPK5XvfccQK for <nfsv4@ietfa.amsl.com>; Thu, 18 Apr 2024 17:28:33 -0700 (PDT)
Received: from mail-pj1-x102e.google.com (mail-pj1-x102e.google.com [IPv6:2607:f8b0:4864:20::102e]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id CB9CFC14F61D for <nfsv4@ietf.org>; Thu, 18 Apr 2024 17:28:33 -0700 (PDT)
Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-2a484f772e2so1051642a91.3 for <nfsv4@ietf.org>; Thu, 18 Apr 2024 17:28:33 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713486513; x=1714091313; darn=ietf.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=UebP7o2sMDxxgoLMY/yKf6LP7OMWrWFS2/QUtb1VJ0c=; b=bkGwT0866YdETQtmU1z9Qlp+gYafzVI9udni+arAMVktqR4neRg7dE+tVa6ZzkvuvW 7ne9ZiWYnIchM0u4JnpOw9vauvp/b4jKWNBzFOP9P53a1u4dj5vTuoZfZOAfa7Cwf3S0 G/4NcHvFshVYmYSTpJh306fiPyKbk6UG6gRF4IZj60l3PxNjtQK3weTRoMTSWHPEntDX Ut5W99X91/35kX88B1cHaeELp8EFBDp1/zxSFiRo+LS2S86a5AW2zaRTP670x9OmWQef NMXcWml2p5yzR7PY69t/y/kELvPxuSdMgzW+iglmW1kwSWX7fxRRs+7JVzTZwv7zTVoC EvOQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713486513; x=1714091313; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UebP7o2sMDxxgoLMY/yKf6LP7OMWrWFS2/QUtb1VJ0c=; b=Kq05huzMdNW0xvf7mwfYjwQP3no5VLOCRJnf6ceji6MeLg4tL/deVoHXrRCKwintr4 xsqQI2KrQM/zpEp64dfX06gxndulic1TMaPsouFrZyxGf/fjcjQ/ecI5s1JmXkT50TCH R/WjyOUSJHi5XIHqlT5f328/ZnDPCf4vLTpH2yDWyT14qPeYm4vpPDfIOdftMGtUL8ua FoOuapq7c74sD1MGRk6+O1asxVfZyqc3iG8MnEHNCf4N13NkLnxAp8yvB7PO/+6DWq+G qRoh5lGJA8jYIJntyH+jz8FKz+cue87S6/9t0MozEwObsLrT697/6zj4tEelPe2vrcEb f40g==
X-Forwarded-Encrypted: i=1; AJvYcCXUZctHn+drjtRM9At8zcpf16S66GmosFVfcepjF3/BFhR7HWKzyOLLlKYbqQkW3lAipuI7ic493DS9GndBLA==
X-Gm-Message-State: AOJu0YwhpRLIjBtcYsEVLv7qqpFkqprpB/XREIq7ZnbUt6OrjWADV81B dTj7iDzp+dUsR+xoHjle7UuEhRJmFXbqpcLJMu033VRfKJkQtcE0F5YkPS16sJRt/WPSfGEkwsF 51KmNMOQF+OozU6PUA22cfsGVdg==
X-Google-Smtp-Source: AGHT+IGzsmtyKErA73ZqSprQMLUdDtknaqaS18nilpopTx4Smf4VsZAd6P7mDDDVQExmQQfdy0LZk3s6Xc3n0sPYcuw=
X-Received: by 2002:a17:90a:af93:b0:2a6:d3c0:28a3 with SMTP id w19-20020a17090aaf9300b002a6d3c028a3mr711237pjq.33.1713486512720; Thu, 18 Apr 2024 17:28:32 -0700 (PDT)
MIME-Version: 1.0
References: <CAM5tNy407R30WQqCuzFE+feRz42wkaAAGOwiHwqFoWZSpwfT0A@mail.gmail.com> <9D17BB42-54A9-46DB-8E4F-3FF852EEAC90@hammerspace.com> <CADaq8jePTg8WVFe2FmrwgUjyc7H9v=Ln7g2FT9G5DJtkpVSF3Q@mail.gmail.com> <CAM5tNy6-ADHC1z9HJME0r5o-hDeG9OucE_SWftDrqE4JnMrhAg@mail.gmail.com> <adc3fb5ed3674078c64399b19891c63b7a1185e4.camel@hammerspace.com> <CAM5tNy77PNiH6aTWTOyhrofe2cFTg+ga8sFzGbi0EHSfrXz79w@mail.gmail.com> <CADaq8jdifYwzZDkrYnaZwV-_bYs=3z8HxfM7mtUAoPy29uvAig@mail.gmail.com> <d4b197a4dcad15d30b4aec25adbd5bb08485f121.camel@hammerspace.com> <CAM5tNy7cDpMd+zms1r6PjtVvZQ7LWyyrFmL6Pn_x1FkJYfPckA@mail.gmail.com> <CAM5tNy6vX6XUfwGLuOWOHWHBxhrL-Kr6Xe-OJT8hspZbuO6PRQ@mail.gmail.com> <6513a671fae58f522224fb608dd9735c2bb5ddaa.camel@hammerspace.com> <CAM5tNy4izPiqDCxJXkWCUCpjFRHx3uR9Po+i_m8O0pmFUFuLbw@mail.gmail.com> <7ECB2A14-9884-483E-A04B-0AC14841BB48@gmail.com>
In-Reply-To: <7ECB2A14-9884-483E-A04B-0AC14841BB48@gmail.com>
From: Rick Macklem <rick.macklem@gmail.com>
Date: Thu, 18 Apr 2024 17:28:22 -0700
Message-ID: <CAM5tNy7Gwowu-y3sd-U2c9F7w0y8J5AZ2Y4t7ayBJ=5qYxQAAg@mail.gmail.com>
To: Thomas Haynes <loghyr@gmail.com>
Cc: Trond Myklebust <trondmy@hammerspace.com>, "nfsv4@ietf.org" <nfsv4@ietf.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/nfsv4/ciC_HXKqPugzWAeKMM7-LdCtPdc>
Subject: Re: [nfsv4] RFC: New DelegReturn_NoFH operation for NFSv4.2?
X-BeenThere: nfsv4@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: NFSv4 Working Group <nfsv4.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/nfsv4>, <mailto:nfsv4-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/nfsv4/>
List-Post: <mailto:nfsv4@ietf.org>
List-Help: <mailto:nfsv4-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/nfsv4>, <mailto:nfsv4-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 19 Apr 2024 00:28:37 -0000

On Thu, Apr 18, 2024 at 4:57 PM Thomas Haynes <loghyr@gmail.com> wrote:
>
>
>
> On Apr 18, 2024, at 1:25 PM, Rick Macklem <rick.macklem@gmail.com> wrote:
>
> On Thu, Apr 18, 2024 at 8:53 AM Trond Myklebust <trondmy@hammerspace.com> wrote:
>
>
> On Wed, 2024-04-17 at 18:54 -0700, Rick Macklem wrote:
>
> On Wed, Apr 17, 2024 at 5:37 PM Rick Macklem <rick.macklem@gmail.com>
> wrote:
>
>
> On Wed, Apr 17, 2024 at 4:56 PM Trond Myklebust
> <trondmy@hammerspace.com> wrote:
>
>
> On Wed, 2024-04-17 at 07:46 -0400, David Noveck wrote:
>
>
>
> On Tue, Apr 16, 2024, 5:40 PM Rick Macklem
> <rick.macklem@gmail.com> wrote:
>
> On Tue, Apr 16, 2024 at 7:44 AM Trond Myklebust
> <trondmy@hammerspace.com> wrote:
>
>
> On Tue, 2024-04-16 at 07:06 -0700, Rick Macklem wrote:
>
> On Tue, Apr 16, 2024 at 5:21 AM David Noveck
> <davenoveck@gmail.com>
> wrote:
>
>
>
>
> On Mon, Apr 15, 2024, 8:06 PM Trond Myklebust
> <trondmy@hammerspace.com> wrote:
>
>
>
>
> On Apr 15, 2024, at 18:31, Rick Macklem
> <rick.macklem@gmail.com>
> wrote:
>
> Hi,
>
> I am wondering if others have found this a pita and are
> interested in
> a new operation for NFSv4.2 to get around it.
>
> Right now DelegReturn requires a CFH and delegation
> stateid.
> I do not know why the CFH is needed, since it seems that
> the
> delegation stateid should be sufficient?
>
> This new operation would be the same as DelegReturn
> except that
> it would not require a CFH argument.
>
> Why am I interested in this?
> - Lets assume a NFSv4.2 server that supports persistent
> FHs and
> multiple hard links (as most extant servers do).
> - A client mounted to this server is removing a file for
> which it
> holds
> a write delegation and a bunch of dirty data.
> Right now, the client must:
> - Write the dirty data back to the server.
> - DelegReturn
> - Remove
> because the client has no way of knowing if the file will
> be
> deleted
> by the Remove (or alternately is just removing one of
> several
> hard links).
>
>
> If a client is holding a delegation, it will presumably
> have done
> a GETATTR at some point while holding that delegation so
> should
> know how many links remain. While it is true that the
> unlink
> might invalidate the filehandle, that’s not a situation
> you are
> able to fix with the new operation.
>
> With a DelegReturn_NoFH, the client could:
> - Do a compound RPC with
> Remove
> PutFH of file
> - if the above returns NFS_OK, the file still exists and
> the
> client
> can continue to use the delegation, writing the dirty
> data back
> to the server sometime later (or maybe never, if the
> file gets
>  deleted by a subsequent Remove).
> or
> - If the above returns NFS4ERR_STALE for the PutFH, the
> file
> has been deleted. It can throw the dirty data away and
> DelegReturn_NoFH the delegation.
>
> A similar situation exists for Rename where the
> destination
> already exists.
>
> I find this scenario happens frequently during software
> builds.
>
> So, what do others think  w.r.t. this new operation? rick
>
>
> Why would you need to do a DELEGRETURN if the PUTFH
> returns
> NFS4ERR_STALE?
>
>
>
> To make sure the client and server agree on the state of
> things.
>
> If the server isn’t willing to just invalidate the
> delegation on
> the final unlink of the file,
>
>
> I'm not sure about "unwilling",  but I am uncomfortable
> with
> unilateral stare changes like this, even if the spec
> indicated that
> needed to be done, which is harder to effect than an
> extension such
> as Rick is proposing
>
> then it can and should recall the delegation (and any
>
> pNFS
> layouts that might be outstanding).
>
> If it did recall it/them, then there is no way to return
> them
> without something like Rick's proposed extension.
>
> I assumed Trond meant "recall during the REMOVE" while the FH
> is
> still valid.
>
>
>
> I didn't get that.  Apparently, I was mistaken.
>
>
> Yes. This is a clarification of how the server can deal with
> the
> problem (if it thinks this is a problem) within the confines of
> the
> existing spec
>
>
>
> That depends on what the problem is.  Your proposal does address
> the problem of recalling a delegation when it is incapable of
> being returned.  It doesn't, at least alone, solve Rick's
> problem  which is that he wants to be able to know, at the time
> of recall, whether he can throw away pending writes, as opposed
> to flushing them to the server.
>
>
> Please re-read what I said above (repeated here):
>
> If a client is holding a delegation, it will presumably
> have done
> a GETATTR at some point while holding that delegation so
> should
> know how many links remain. While it is true that the
> unlink
> might invalidate the filehandle, that’s not a situation
> you are
> able to fix with the new operation.
>
> I did not get this. Now I see that in LINK (sec. 18.9.3) it says
> that
> delegations must
> be CB_RECALL'd (I never noticed that and assumed that a LINK could
> be done by another client when a delegation is held. My Bad;-)
>
> So, yes, the client that holds a delegation can track numlinks for
> the
> file. I didn't realize that was the case.
>
> I now think there is a glitch in this plan...
> I cannot see anywhere in RFC7530 that specifies LINK should recall
> delegations, so I am not sure if a NFSv4.0 LINK done by another
> client
> could increase numlinks without the delegation being recalled.
> (I knew there was a reason the FreeBSD NFSv4 server did not recall
> delegations for LINK. I will patch it to do so for NFSv4.1/4.2.)
>
>
> It doesn't just change nlink. It also bumps the change attribute (and
> the ctime), which by itself implies that it must recall delegations
> according to RFC8881.
> Specifically in section 10.2:
>
>   *  The semantics of the file system are crucial in defining when
>      delegation recall is required.  If a particular change within a
>      specific implementation causes change to a file attribute, then
>      delegation recall is required, whether that operation has been
>      specifically listed as requiring delegation recall.  Again, what
>      is critical is whether the guarantees provided by the delegation
>      are being invalidated.
>
> The Linux client interprets that to mean that LINK will recall
> delegations.
>
> Yes, I agree, for NFSv4.1/4.2.
> (And admit the FreeBSD NFSv4.1/4.2 needs to be fixed to do this.)
>
> But what about NFSv4.0?
> I'm looking, but cannot find similar words in RFC7530.
> (Sec. 10.4.4. deals with Recall  of an Open Delegation, but it
> does not mention LINK and it does not mention "any operation
> that modifies the attributes. The same words appear to be in
> RFC3530, except under Sec. 9.4.4.) I do find mention that
> holders of delegations can either not modify attributes or
> only the attributes related to writing for write delegation.
> However, I cannot see any mention of clients that do not
> hold delegations.
>
> Maybe you are arguing that it should have been obvious for
> NFSv4.0, but it was not so for me (and, therefore, maybe other NFSv4.0
> implementers?). There is also the case of NFSv3 LINK RPCs.
>
> Although it would be nice to assume, I'm not convinced that
> extant NFS servers will all provide the guarantee that numlinks will
> not be changed (increased via LINK) when the client holds
> a delegation.
> (If the client could be sure the NFS server was a "pure NFSv4.1/4.2
> server and did not support earlier NFS versions, I would agree with
> you.)
>
>
> I was under the impression that a server was either NFSv4.0 or NFSv4.1/4.2, even if pNFS was not applied.
Hmm, not sure what you mean. For a given client mount, yes, the mount uses one
version of the protocol or the other. However, for a NFS server, the
same file system
can often be exported to clients doing NFSv4.0 mounts and other
clients doing NFSv4.1/4.2
mounts. (ie. Same exported files/file handles, but different clients
doing mounts with
different protocol versions.)

Heck, at the Bakeathons, some servers are configured to allow NFSv3
mounts as well.

The specific case I was discussing is "what happens w.r.t. delegation
recall when these
clients using different NFS versions for their mounts do a LINK?".

For what I understood, Trond was suggesting the NFSv4.1/4.2 client holding a
write delegation would be guaranteed that the numlinks attribute would
not change.
(For that to work, any LINK done by any NFS mount using any NFS version must
cause a recall of the delegation, unless the LINK is done by the same
client as the
one holding the delegation. And I am concerned that the NFS server
will not recall
the delegation when a NFSv4.0 mount does the LINK, since RFC7530 does not
mention recall of delegations for LINK.)

rick

>
> And again, I really wish we had bumped the major version to NFSv5.0 on that release….
>
>
>
>
> I just think that, since RFC7530 Sec. 10.4.4. makes no mention of
> LINK, it is risky to assume all NFSv4.0 server implementations recall
> delegations when a LINK is done. (In particular, since the NFSv4.0
> cannot know which client is performing the LINK.)
>
> rick
>
>
> --
> Trond Myklebust
> Linux NFS client maintainer, Hammerspace
> trond.myklebust@hammerspace.com
>
>
>
> _______________________________________________
> nfsv4 mailing list
> nfsv4@ietf.org
> https://www.ietf.org/mailman/listinfo/nfsv4
>
>