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

Rick Macklem <rick.macklem@gmail.com> Fri, 19 April 2024 00:13 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 57648C14F738 for <nfsv4@ietfa.amsl.com>; Thu, 18 Apr 2024 17:13:19 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -7.098
X-Spam-Level:
X-Spam-Status: No, score=-7.098 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] 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 5Z1B23JvK4y1 for <nfsv4@ietfa.amsl.com>; Thu, 18 Apr 2024 17:13:16 -0700 (PDT)
Received: from mail-pg1-x52d.google.com (mail-pg1-x52d.google.com [IPv6:2607:f8b0:4864:20::52d]) (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 DE599C14F739 for <nfsv4@ietf.org>; Thu, 18 Apr 2024 17:13:16 -0700 (PDT)
Received: by mail-pg1-x52d.google.com with SMTP id 41be03b00d2f7-5d8b519e438so1135161a12.1 for <nfsv4@ietf.org>; Thu, 18 Apr 2024 17:13:16 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713485596; x=1714090396; 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=G7EUk85dqkvmK1zbhKOUJCzVmF38mvOe6GndpyKm4CQ=; b=Za/Mky1NuE+JqcuAvzCHzFckbO6TQpIGFlqeOt8WhlV2lOn+qY+jVFnhtXaTIN5G47 OzHlqNM0hZKor7xjHxubK5K1xuQcTcaFPeC6q++Ls2cYjivThSUztmZgPs8csU8Q78rb bCybt6ZSFY+0s+sX8abQFfAKEbpBZsioZyNZPCND/Wg26SdWOJXDl5l3fvBZyadiD9do Wxq5VRfpbgVGeaNS00s8UxJ/epcBNIX6jXWy4IgxBqFYbnED6QGwn2NcJqIBLl6o45oh 0IqB8y1W6LfUzdpNPdeb6I1ytReOy6mr9HDrAl7XL/P/XEFMf1FVLHSWU3Ai7+uXRr7q /xeA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713485596; x=1714090396; 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=G7EUk85dqkvmK1zbhKOUJCzVmF38mvOe6GndpyKm4CQ=; b=SolWrtkj/XauC8vGmCkmjFqg6yQIRunge4JJuvILN/dlOqOyZbNxKVQh+i72gummMX WTNJ+jsxGBlDW3gg/sBUqbcIURvvwg2F9WxUZheINYf7IBosWC036wjILfj7c4J6+b5v aG4RECB278x98UVzrHt9Qcq4tMX75rgIhtfQAHYtFSzzdP+aJf1a7xu+9i+/hzFf5+cF lnuNuZMDdO4WFfRvHxmHbd0WH0bs4Z1f5cZPD0hZc2Emp0PvzAgjg02iKh1IsZpzY/17 UW7NVcuwCa+Zt2XDHQ3WbbaRFBBZXQvzvykvNkbxynSarv3tjYpFbNVdUPoUYXhv03YD GpkA==
X-Gm-Message-State: AOJu0YxEVHnfVAXkiixkpRrKDwWTUckZuJZuYkaqMSXyIfeCXK4SrUnF VCGTW4ho7N6kxKTGq21/ekvQcjwF22sMthe5V79FGfYy967z8YaqPLhcetRRLGlHPxyGvgD6vLT ts4n5Grk718j0db0EOydnE8E1V+Tw
X-Google-Smtp-Source: AGHT+IE5yFn7EFwFh/SVIHcMEIqfNOGPmXlM2af3hayo3C8gYR7HYrbsKFmzXpHYiXc/rVwmGbPxdFZLdUXabtXALYc=
X-Received: by 2002:a05:6a20:c892:b0:1a7:2ce0:633d with SMTP id hb18-20020a056a20c89200b001a72ce0633dmr900569pzb.5.1713485595980; Thu, 18 Apr 2024 17:13:15 -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> <d2f335cfe57f19a57e13f3304fdbe806e1bb3d5d.camel@hammerspace.com>
In-Reply-To: <d2f335cfe57f19a57e13f3304fdbe806e1bb3d5d.camel@hammerspace.com>
From: Rick Macklem <rick.macklem@gmail.com>
Date: Thu, 18 Apr 2024 17:13:05 -0700
Message-ID: <CAM5tNy7zZ8edF5KCoTJFjfndKyet1kaepcUbKV=EqquAR0_Dag@mail.gmail.com>
To: Trond Myklebust <trondmy@hammerspace.com>
Cc: "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/mGN_dhx6W1jmlWplVNbAE1bbh4Q>
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:13:19 -0000

On Thu, Apr 18, 2024 at 4:49 PM Trond Myklebust <trondmy@hammerspace.com> wrote:
>
> On Thu, 2024-04-18 at 13:25 -0700, Rick Macklem 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 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.)
> >
>
> What is the motivation for continuing to optimise NFSv4.0? While it
> would be nice to allow it to benefit too, that problem is not one that
> keeps me awake at night.
I certainly am not interested in improving NFSv4.0.

What I was trying to say is...
When an NFSv4.0 client does a LINK, does the NFSv4.[0,1,2] server
recall all delegations for the file?
If not, then the numlinks attribute could get increased without the
delegation being recalled. And if that is the case, then the NFSv4.1/4.2
client cannot trust its value of numlinks to indicate if the file being
REMOVE'd will be deleted on the server.

rick

>
> --
> Trond Myklebust
> Linux NFS client maintainer, Hammerspace
> trond.myklebust@hammerspace.com
>
>