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

Rick Macklem <rick.macklem@gmail.com> Thu, 18 April 2024 20:25 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 562A6C14F6FD for <nfsv4@ietfa.amsl.com>; Thu, 18 Apr 2024 13:25:54 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.098
X-Spam-Level:
X-Spam-Status: No, score=-2.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_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 mSSEewMeMI2D for <nfsv4@ietfa.amsl.com>; Thu, 18 Apr 2024 13:25:49 -0700 (PDT)
Received: from mail-pg1-x533.google.com (mail-pg1-x533.google.com [IPv6:2607:f8b0:4864:20::533]) (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 D1362C14F70C for <nfsv4@ietf.org>; Thu, 18 Apr 2024 13:25:49 -0700 (PDT)
Received: by mail-pg1-x533.google.com with SMTP id 41be03b00d2f7-5e8470c1cb7so863662a12.2 for <nfsv4@ietf.org>; Thu, 18 Apr 2024 13:25:49 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713471949; x=1714076749; 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=7BnZmnHqUOz0LISG+YuJLgve1+56EOzkKkQteOvjdoE=; b=OORdkkXZPzCofqHYIzRmjmwIbn/lnMXZeCdAyjKQoOIGpIRp8RW6G9sgXgCMtxHC5+ WlVM0xkizMfFLZQT48ngnA12X1OBiZEyYcVZBs3DKEuIJmMd5vriWM6WMNbUEpamvn6X clKyKL6EOm1EE6G+PQQccjYphhVcdjPW59DB/pVi7arBAiFgHUSnu0eAWWR7ZggPGQAe Zi5wmQzLZfhMXVO3Rq2cYBUDFwANjOP8YSuS1r/Qff7OMhOZndYEP7oxUt+iU5NR17Ss luHDNV83V8zmFs62cs0x+vwvIxAmywPezAkXD25w/zs4wX/K18lVcE2fYfbN7gmI1FHV 7+uQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713471949; x=1714076749; 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=7BnZmnHqUOz0LISG+YuJLgve1+56EOzkKkQteOvjdoE=; b=CnRMUUnQ1sjfbXPPcde34EHhzDEAnzdNAy5X/WCZ7qQGVB+p9/ylpCttv2bXqDTJQK 4cQ5CX5FykvEdciIdAW3mFgue/dd2CYLkyOZpZUuEkbGyQ4T/z78qISAzVYvLd6O3axI LMmniOKTOdK2eatGZPqCJVewV9CNaHRyLbunhy4dAPlj56j9gv61n+hGr8Aa6UKot8id x4w1NGsDZi+4lqw/zIwoAW5LOJAOm70sFuukmYAV6mGQ7UV3jiP7s7B0P8a5b6bYjYSJ XHt3QDyr07RO+3jVaGBdmoxFsVhY9m8YwiSUVlkbDfsol7uNQS0kDHbq6r5FH8ni7dn7 UqSA==
X-Gm-Message-State: AOJu0YxeweiIbhqrSuJUfuYqSDJXkIJf+KAzpMYN6YT4aK78jjxtgkrs tn6JH4jMFpIiP99zwbrsfZYWeXrJwXXPaPbWI0CBe01XVsLdJu3aqvJukOha8Vth6nr9oFPbxs1 dYbuNdPFOAIAwTV3VpRm/xQ3hqx1I
X-Google-Smtp-Source: AGHT+IHvKw9L++0ra8zAEU97iWDJfa3KX5b579yECg3EizCcCaADBiYa7vmYeiaMfiuS1KZuYDjkXom4Z78Ehyf6xa0=
X-Received: by 2002:a05:6a20:100b:b0:1a9:5e1f:8485 with SMTP id gs11-20020a056a20100b00b001a95e1f8485mr303584pzc.31.1713471948660; Thu, 18 Apr 2024 13:25:48 -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>
In-Reply-To: <6513a671fae58f522224fb608dd9735c2bb5ddaa.camel@hammerspace.com>
From: Rick Macklem <rick.macklem@gmail.com>
Date: Thu, 18 Apr 2024 13:25:37 -0700
Message-ID: <CAM5tNy4izPiqDCxJXkWCUCpjFRHx3uR9Po+i_m8O0pmFUFuLbw@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/fwvumclgqWKQP0mpB_Q-lAcgo70>
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: Thu, 18 Apr 2024 20:25:54 -0000

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.)

rick

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