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

Rick Macklem <rick.macklem@gmail.com> Thu, 18 April 2024 01:54 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 55D4FC14F71C for <nfsv4@ietfa.amsl.com>; Wed, 17 Apr 2024 18:54:43 -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_DNSWL_NONE=-0.0001, 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 Nzi1dUIkL1nQ for <nfsv4@ietfa.amsl.com>; Wed, 17 Apr 2024 18:54:42 -0700 (PDT)
Received: from mail-pg1-x52f.google.com (mail-pg1-x52f.google.com [IPv6:2607:f8b0:4864:20::52f]) (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 B70DFC14F708 for <nfsv4@ietf.org>; Wed, 17 Apr 2024 18:54:42 -0700 (PDT)
Received: by mail-pg1-x52f.google.com with SMTP id 41be03b00d2f7-5dbcfa0eb5dso243028a12.3 for <nfsv4@ietf.org>; Wed, 17 Apr 2024 18:54:42 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713405282; x=1714010082; 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=8VUa8Gs5Bitp2eK43nGGf/51fuRcaFtxZgIJjtEXeEw=; b=ld+gE79XWcb5guBv8Caazt4J+p+rxn65kiui6j0hzk0Dpf5kq3ZPkvFTYmaKhIW1kC G9C7Tg/f3r1pZRse6twjUqpjusuy4pVlnZqcwgpngD7vxBx6wsgxSbbjG79tu2lxAnLF jzr6rY44t4wkw3wcDlBYgH0n2aAAquY6P3bzFB+gYcUdSAhhzGqU7Lt7wOEQcGW6k9LX sYGjMPiCDm8cTc/LwAS69el425lJ2Pzd+S0bMZhUqJbqwHarikNUdAY/GQU6uy77jHbm 9XBnFdYx6UmoLdmcG5LaGMYztEANle7j+WgWxqoOswp8AC0oSx8i1SZMbqafHM7Ib6El Ce5A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713405282; x=1714010082; 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=8VUa8Gs5Bitp2eK43nGGf/51fuRcaFtxZgIJjtEXeEw=; b=i2x/Yd9bfbuFaEL88soTAbP7Z28EDwMuisJoO9kSED13j4hd0i7gFAW1fDULt22aQf ru168nUh/YEL2ra9LosUaIOBhH7hpoZ+GUih/AvIJi2rWQbeLFoytBSuoYI3Uhegn9m2 X+w3G8/gS8twa6zv4FdmsINHmN48qkd6PcFHBiH/twfKQoF/Y2TlIa/BTHb7BRLcRHm6 ng5wRWbKlcllK0edydJLfIznRHTUKSbTJXHqeTtnGRQJuvrtvtuofOIvD7eSsBaCKhO7 5nWNjeJCMVJKsdwSgoVsXYlW7Rm4kLV/ZRSOmtbLRE5P0jw6FY4zkiss3pmRmlD0nRUq K0lQ==
X-Forwarded-Encrypted: i=1; AJvYcCXSvHEU5qbl+K2KmlfpPNAYlZSWlGakQ835+/Wkro9hWou9cRlUwO+/xzj0dtA0QiOmv+4rF7P7Ja38Zx8EYQ==
X-Gm-Message-State: AOJu0YyoxWKaliQITvX9axcpOKJRzAU6VHJ/CS78EMe9+39MesGs6+d6 2lUGr/cjQ92+h/wB5A0wRgpLMuRU8nE/8oU6Osh8449INDJLsg8QtICXQ4pcwp14BnxrOZGPqmK BBnnlf2XGuB0qU02cLZ5MU47Ws5au
X-Google-Smtp-Source: AGHT+IEJFuspAjvj4aae+LYMs5dIa0KqmtTgFWTXBgjXUJJ1h1GiMDGw8Eb/ruM62lg4vh5H4+FM45kjBGRqlwardiY=
X-Received: by 2002:a17:90a:f316:b0:2a5:d313:4d3f with SMTP id ca22-20020a17090af31600b002a5d3134d3fmr1338129pjb.34.1713405281647; Wed, 17 Apr 2024 18:54:41 -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>
In-Reply-To: <CAM5tNy7cDpMd+zms1r6PjtVvZQ7LWyyrFmL6Pn_x1FkJYfPckA@mail.gmail.com>
From: Rick Macklem <rick.macklem@gmail.com>
Date: Wed, 17 Apr 2024 18:54:30 -0700
Message-ID: <CAM5tNy6vX6XUfwGLuOWOHWHBxhrL-Kr6Xe-OJT8hspZbuO6PRQ@mail.gmail.com>
To: Trond Myklebust <trondmy@hammerspace.com>
Cc: "davenoveck@gmail.com" <davenoveck@gmail.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/RKCBcK1LW_X6f__sExlzml31KCo>
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 01:54:43 -0000

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

rick

>
> >
> >
> > The point is that there are 2 problems here, and they are orthogonal to one another.
> >
> > One problem is the question of "is this the last link?", which the above addresses. Well.... Except that Rick cannot know for certain that the REMOVE will actually succeed. Until he has tried the operation, he can only hope...
> >
> > The second problem is the question of "is the filehandle now stale, and how do I return my delegation?", which the above does not address. For reasons best known to themselves, the authors of RFC3010, and subsequent NFSv4 specs decided that it is OK to have filehandles that are derived from an object pathname (e.g. RFC8881 section 4.2.1 and section 10.3.4), so presumably the REMOVE could end up invalidating the filehandle despite the file having several links remaining. It seems to me that such a server does need to either recall the delegation, or be prepared to administratively revoke it on invalidation of that filehandle.
>
> Isn't this covered by a persistent filehandle, which is what I specified
> in the original post (and have assumed throughout) and. maybe, support
> for numlinks? (It might be possible to construct a persistent FH using an
> object pathname, but only if multiple hard links are not supported, I think?)
>
> (To be honest, the FreeBSD NFSv4.1/4.2 client will be broken for non-persistent
> file handles and I have yet to hear reports of problems or done any work to fix
> it. It has never been clear to me what a client does when a volatile file handle
> becomes NFS4ERR_FHEXPIRED?)
>
> So, now that I know numlinks will not be changed by other clients
> while a delegation
> is held, I think that numlinks == 1 before a REMOVE will determine if
> the file will
> be deleted and I think that resolves this.
> (Assuming persistent file handles.)
>
> rick
>
> > The gentler approach would be to recall...
> >
> > --
> >
> > Trond Myklebust
> > Linux NFS client maintainer, Hammerspace
> > trond.myklebust@hammerspace.com
> >
> >