All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff Layton <jlayton@kernel.org>
To: Chuck Lever <chuck.lever@oracle.com>,
	Alexander Viro	 <viro@zeniv.linux.org.uk>,
	Christian Brauner <brauner@kernel.org>, Jan Kara <jack@suse.cz>,
	Alexander Aring <alex.aring@gmail.com>,
	Trond Myklebust	 <trondmy@kernel.org>,
	Anna Schumaker <anna@kernel.org>,
	Steve French	 <sfrench@samba.org>,
	Ronnie Sahlberg <ronniesahlberg@gmail.com>,
	Shyam Prasad N	 <sprasad@microsoft.com>,
	Tom Talpey <tom@talpey.com>,
	Bharath SM	 <bharathsm@microsoft.com>,
	NeilBrown <neil@brown.name>,
	Olga Kornievskaia	 <okorniev@redhat.com>,
	Dai Ngo <Dai.Ngo@oracle.com>, Jonathan Corbet	 <corbet@lwn.net>,
	Amir Goldstein <amir73il@gmail.com>,
	Miklos Szeredi	 <miklos@szeredi.hu>,
	Paulo Alcantara <pc@manguebit.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	 Danilo Krummrich	 <dakr@kernel.org>,
	David Howells <dhowells@redhat.com>,
	Tyler Hicks	 <code@tyhicks.com>,
	Namjae Jeon <linkinjeon@kernel.org>,
	Steve French	 <smfrench@gmail.com>,
	Sergey Senozhatsky <senozhatsky@chromium.org>,
	Carlos Maiolino <cem@kernel.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Masami Hiramatsu	 <mhiramat@kernel.org>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Rick Macklem <rick.macklem@gmail.com>,
	linux-fsdevel@vger.kernel.org,  linux-kernel@vger.kernel.org,
	linux-nfs@vger.kernel.org,  linux-cifs@vger.kernel.org,
	samba-technical@lists.samba.org,  linux-doc@vger.kernel.org,
	netfs@lists.linux.dev, ecryptfs@vger.kernel.org,
	linux-unionfs@vger.kernel.org, linux-xfs@vger.kernel.org,
	 linux-trace-kernel@vger.kernel.org
Subject: Re: [PATCH v3 00/38] vfs, nfsd: implement directory delegations
Date: Thu, 25 Sep 2025 13:08:10 -0400	[thread overview]
Message-ID: <77d7000f15341c20d254a7804e08b3b252cc4e52.camel@kernel.org> (raw)
In-Reply-To: <e8889519-ca38-430f-b79c-790dabacafac@oracle.com>

On Thu, 2025-09-25 at 09:39 -0400, Chuck Lever wrote:
> On 9/24/25 11:05 AM, Jeff Layton wrote:
> > This patchset is an update to a patchset that I posted in early June
> > this year [1]. This version should be basically feature-complete, with a
> > few caveats.
> > 
> > NFSv4.1 adds a GET_DIR_DELEGATION operation, to allow clients
> > to request a delegation on a directory. If the client holds a directory
> > delegation, then it knows that nothing will change the dentries in it
> > until it has been recalled (modulo the case where the client requests
> > notifications of directory changes).
> > 
> > In 2023, Rick Macklem gave a talk at the NFS Bakeathon on his
> > implementation of directory delegations for FreeBSD [2], and showed that
> > it can greatly improve LOOKUP-heavy workloads. There is also some
> > earlier work by CITI [3] that showed similar results. The SMB protocol
> > also has a similar sort of construct, and they have also seen large
> > performance improvements on certain workloads.
> > 
> > This version also starts with support for trivial directory delegations
> > that support no notifications.  From there it adds VFS support for
> > ignoring certain break_lease() events in directories. It then adds
> > support for basic CB_NOTIFY calls (with names only). Next, support for
> > sending attributes in the notifications is added.
> > 
> > I think that this version should be getting close to merge ready. Anna
> > has graciously agreed to work on the client-side pieces for this. I've
> > mostly been testing using pynfs tests (which I will submit soon).
> > 
> > The main limitation at this point is that callback requests are
> > currently limited to a single page, so we can't send very many in a
> > single CB_NOTIFY call. This will make it easy to "get into the weeds" if
> > you're changing a directory quickly. The server will just recall the
> > delegation in that case, so it's harmless even though it's not ideal.
> > 
> > If this approach looks acceptable I'll see if we can increase that
> > limitation (it seems doable).
> > 
> > If anyone wishes to try this out, it's in the "dir-deleg" branch in my
> > tree at kernel.org [4].
> > 
> > [1]: https://lore.kernel.org/linux-nfs/20250602-dir-deleg-v2-0-a7919700de86@kernel.org/
> > [2]: https://www.youtube.com/watch?v=DdFyH3BN5pI
> > [3]: https://linux-nfs.org/wiki/index.php/CITI_Experience_with_Directory_Delegations
> > [4]: https://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux.git/
> > 
> > Signed-off-by: Jeff Layton <jlayton@kernel.org>
> > ---
> > Changes in v3:
> > - Rework to do minimal work in fsnotify callbacks
> > - Add support for sending attributes in CB_NOTIFY calls
> > - Add support for dir attr change notifications
> > - Link to v2: https://lore.kernel.org/r/20250602-dir-deleg-v2-0-a7919700de86@kernel.org
> > 
> > Changes in v2:
> > - add support for ignoring certain break_lease() events
> > - basic support for CB_NOTIFY
> > - Link to v1: https://lore.kernel.org/r/20240315-dir-deleg-v1-0-a1d6209a3654@kernel.org
> > 
> > ---
> > Jeff Layton (38):
> >       filelock: push the S_ISREG check down to ->setlease handlers
> >       filelock: add a lm_may_setlease lease_manager callback
> >       vfs: add try_break_deleg calls for parents to vfs_{link,rename,unlink}
> >       vfs: allow mkdir to wait for delegation break on parent
> >       vfs: allow rmdir to wait for delegation break on parent
> >       vfs: break parent dir delegations in open(..., O_CREAT) codepath
> >       vfs: make vfs_create break delegations on parent directory
> >       vfs: make vfs_mknod break delegations on parent directory
> >       filelock: lift the ban on directory leases in generic_setlease
> >       nfsd: allow filecache to hold S_IFDIR files
> >       nfsd: allow DELEGRETURN on directories
> >       nfsd: check for delegation conflicts vs. the same client
> >       nfsd: wire up GET_DIR_DELEGATION handling
> >       filelock: rework the __break_lease API to use flags
> >       filelock: add struct delegated_inode
> >       filelock: add support for ignoring deleg breaks for dir change events
> >       filelock: add a tracepoint to start of break_lease()
> >       filelock: add an inode_lease_ignore_mask helper
> >       nfsd: add protocol support for CB_NOTIFY
> >       nfs_common: add new NOTIFY4_* flags proposed in RFC8881bis
> >       nfsd: allow nfsd to get a dir lease with an ignore mask
> >       vfs: add fsnotify_modify_mark_mask()
> >       nfsd: update the fsnotify mark when setting or removing a dir delegation
> >       nfsd: make nfsd4_callback_ops->prepare operation bool return
> >       nfsd: add callback encoding and decoding linkages for CB_NOTIFY
> >       nfsd: add data structures for handling CB_NOTIFY to directory delegation
> >       nfsd: add notification handlers for dir events
> >       nfsd: add tracepoint to dir_event handler
> >       nfsd: apply the notify mask to the delegation when requested
> >       nfsd: add helper to marshal a fattr4 from completed args
> >       nfsd: allow nfsd4_encode_fattr4_change() to work with no export
> >       nfsd: send basic file attributes in CB_NOTIFY
> >       nfsd: allow encoding a filehandle into fattr4 without a svc_fh
> >       nfsd: add a fi_connectable flag to struct nfs4_file
> >       nfsd: add the filehandle to returned attributes in CB_NOTIFY
> >       nfsd: properly track requested child attributes
> >       nfsd: track requested dir attributes
> >       nfsd: add support to CB_NOTIFY for dir attribute changes
> > 
> >  Documentation/sunrpc/xdr/nfs4_1.x    | 267 +++++++++++++++++-
> >  drivers/base/devtmpfs.c              |   2 +-
> >  fs/attr.c                            |   4 +-
> >  fs/cachefiles/namei.c                |   2 +-
> >  fs/ecryptfs/inode.c                  |   2 +-
> >  fs/fuse/dir.c                        |   1 +
> >  fs/init.c                            |   2 +-
> >  fs/locks.c                           | 122 ++++++--
> >  fs/namei.c                           | 253 +++++++++++------
> >  fs/nfs/nfs4file.c                    |   2 +
> >  fs/nfsd/filecache.c                  | 101 +++++--
> >  fs/nfsd/filecache.h                  |   2 +
> >  fs/nfsd/nfs4callback.c               |  60 +++-
> >  fs/nfsd/nfs4layouts.c                |   3 +-
> >  fs/nfsd/nfs4proc.c                   |  36 ++-
> >  fs/nfsd/nfs4recover.c                |   2 +-
> >  fs/nfsd/nfs4state.c                  | 531 +++++++++++++++++++++++++++++++++--
> >  fs/nfsd/nfs4xdr.c                    | 298 +++++++++++++++++---
> >  fs/nfsd/nfs4xdr_gen.c                | 506 ++++++++++++++++++++++++++++++++-
> >  fs/nfsd/nfs4xdr_gen.h                |  20 +-
> >  fs/nfsd/state.h                      |  73 ++++-
> >  fs/nfsd/trace.h                      |  21 ++
> >  fs/nfsd/vfs.c                        |   7 +-
> >  fs/nfsd/vfs.h                        |   2 +-
> >  fs/nfsd/xdr4.h                       |   3 +
> >  fs/nfsd/xdr4cb.h                     |  12 +
> >  fs/notify/mark.c                     |  29 ++
> >  fs/open.c                            |   8 +-
> >  fs/overlayfs/overlayfs.h             |   2 +-
> >  fs/posix_acl.c                       |  12 +-
> >  fs/smb/client/cifsfs.c               |   3 +
> >  fs/smb/server/vfs.c                  |   2 +-
> >  fs/utimes.c                          |   4 +-
> >  fs/xattr.c                           |  16 +-
> >  fs/xfs/scrub/orphanage.c             |   2 +-
> >  include/linux/filelock.h             | 143 +++++++---
> >  include/linux/fs.h                   |  11 +-
> >  include/linux/fsnotify_backend.h     |   1 +
> >  include/linux/nfs4.h                 | 127 ---------
> >  include/linux/sunrpc/xdrgen/nfs4_1.h | 304 +++++++++++++++++++-
> >  include/linux/xattr.h                |   4 +-
> >  include/trace/events/filelock.h      |  38 ++-
> >  include/uapi/linux/nfs4.h            |   2 -
> >  43 files changed, 2636 insertions(+), 406 deletions(-)
> > ---
> > base-commit: 36c204d169319562eed170f266c58460d5dad635
> > change-id: 20240215-dir-deleg-e212210ba9d4
> > 
> > Best regards,
> 
> Series is clean and easy to read, thanks for your hard work! I agree
> that the NFSD portions appear to be complete and ready to accept.
> 
> Because the series is cross-subsystem, we will need to discuss a merge
> plan. So I'll hold off on R-b or Acked until that is nailed down.
> 

Thanks. It's sensible to hold off for a bit. There is at least one leak
that I found earlier today, and a few cleanups that I have queued up.

We also have a bake-a-thon in another couple of weeks where I hope to
test this more extensively. After that, I'm hoping we'll be in
reasonable shape to take it into linux-next.

What I may do is reorder the vfs patches to the front of the queue and
plead to Christian and Al to take them into a branch that feeds into
linux-next. That way we can at least get some feedback and testing with
those bits in place, and a foundation on which we can merge the nfsd
bits.

-- 
Jeff Layton <jlayton@kernel.org>

  reply	other threads:[~2025-09-25 17:08 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-24 18:05 [PATCH v3 00/38] vfs, nfsd: implement directory delegations Jeff Layton
2025-09-24 18:05 ` [PATCH v3 01/38] filelock: push the S_ISREG check down to ->setlease handlers Jeff Layton
2025-09-24 18:05 ` [PATCH v3 02/38] filelock: add a lm_may_setlease lease_manager callback Jeff Layton
2025-09-24 18:05 ` [PATCH v3 03/38] vfs: add try_break_deleg calls for parents to vfs_{link,rename,unlink} Jeff Layton
2025-09-25 15:52   ` Jan Kara
2025-09-24 18:05 ` [PATCH v3 04/38] vfs: allow mkdir to wait for delegation break on parent Jeff Layton
2025-09-25 15:58   ` Jan Kara
2025-09-25 17:12     ` Jeff Layton
2025-09-24 18:05 ` [PATCH v3 05/38] vfs: allow rmdir " Jeff Layton
2025-09-25 17:13   ` Jeff Layton
2025-09-24 18:05 ` [PATCH v3 06/38] vfs: break parent dir delegations in open(..., O_CREAT) codepath Jeff Layton
2025-09-26 15:32   ` Jan Kara
2025-09-24 18:05 ` [PATCH v3 07/38] vfs: make vfs_create break delegations on parent directory Jeff Layton
2025-09-26 15:21   ` Jan Kara
2025-09-26 15:23   ` Jan Kara
2025-09-26 15:33     ` Jan Kara
2025-09-24 18:05 ` [PATCH v3 08/38] vfs: make vfs_mknod " Jeff Layton
2025-09-26 15:32   ` Jan Kara
2025-09-26 16:27     ` Jeff Layton
2025-09-24 18:05 ` [PATCH v3 09/38] filelock: lift the ban on directory leases in generic_setlease Jeff Layton
2025-09-24 18:05 ` [PATCH v3 10/38] nfsd: allow filecache to hold S_IFDIR files Jeff Layton
2025-09-24 18:05 ` [PATCH v3 11/38] nfsd: allow DELEGRETURN on directories Jeff Layton
2025-09-24 18:05 ` [PATCH v3 12/38] nfsd: check for delegation conflicts vs. the same client Jeff Layton
2025-09-24 18:05 ` [PATCH v3 13/38] nfsd: wire up GET_DIR_DELEGATION handling Jeff Layton
2025-09-24 18:06 ` [PATCH v3 14/38] filelock: rework the __break_lease API to use flags Jeff Layton
2025-09-24 18:06 ` [PATCH v3 15/38] filelock: add struct delegated_inode Jeff Layton
2025-09-24 18:06 ` [PATCH v3 16/38] filelock: add support for ignoring deleg breaks for dir change events Jeff Layton
2025-09-24 18:06 ` [PATCH v3 17/38] filelock: add a tracepoint to start of break_lease() Jeff Layton
2025-09-24 18:06 ` [PATCH v3 18/38] filelock: add an inode_lease_ignore_mask helper Jeff Layton
2025-09-24 18:06 ` [PATCH v3 19/38] nfsd: add protocol support for CB_NOTIFY Jeff Layton
2025-09-24 18:06 ` [PATCH v3 20/38] nfs_common: add new NOTIFY4_* flags proposed in RFC8881bis Jeff Layton
2025-09-24 18:06 ` [PATCH v3 21/38] nfsd: allow nfsd to get a dir lease with an ignore mask Jeff Layton
2025-09-24 18:06 ` [PATCH v3 22/38] vfs: add fsnotify_modify_mark_mask() Jeff Layton
2025-09-25 15:50   ` Jan Kara
2025-09-24 18:06 ` [PATCH v3 23/38] nfsd: update the fsnotify mark when setting or removing a dir delegation Jeff Layton
2025-09-24 18:06 ` [PATCH v3 24/38] nfsd: make nfsd4_callback_ops->prepare operation bool return Jeff Layton
2025-09-24 18:06 ` [PATCH v3 25/38] nfsd: add callback encoding and decoding linkages for CB_NOTIFY Jeff Layton
2025-09-24 18:06 ` [PATCH v3 26/38] nfsd: add data structures for handling CB_NOTIFY to directory delegation Jeff Layton
2025-09-24 18:06 ` [PATCH v3 27/38] nfsd: add notification handlers for dir events Jeff Layton
2025-09-25 17:15   ` Jeff Layton
2025-09-26 16:45   ` kernel test robot
2025-09-24 18:06 ` [PATCH v3 28/38] nfsd: add tracepoint to dir_event handler Jeff Layton
2025-09-24 18:06 ` [PATCH v3 29/38] nfsd: apply the notify mask to the delegation when requested Jeff Layton
2025-09-24 18:06 ` [PATCH v3 30/38] nfsd: add helper to marshal a fattr4 from completed args Jeff Layton
2025-09-24 18:06 ` [PATCH v3 31/38] nfsd: allow nfsd4_encode_fattr4_change() to work with no export Jeff Layton
2025-09-24 18:06 ` [PATCH v3 32/38] nfsd: send basic file attributes in CB_NOTIFY Jeff Layton
2025-09-24 18:06 ` [PATCH v3 33/38] nfsd: allow encoding a filehandle into fattr4 without a svc_fh Jeff Layton
2025-09-24 18:06 ` [PATCH v3 34/38] nfsd: add a fi_connectable flag to struct nfs4_file Jeff Layton
2025-09-24 18:06 ` [PATCH v3 35/38] nfsd: add the filehandle to returned attributes in CB_NOTIFY Jeff Layton
2025-09-24 18:06 ` [PATCH v3 36/38] nfsd: properly track requested child attributes Jeff Layton
2025-09-24 18:06 ` [PATCH v3 37/38] nfsd: track requested dir attributes Jeff Layton
2025-09-24 18:06 ` [PATCH v3 38/38] nfsd: add support to CB_NOTIFY for dir attribute changes Jeff Layton
2025-09-25 13:39 ` [PATCH v3 00/38] vfs, nfsd: implement directory delegations Chuck Lever
2025-09-25 17:08   ` Jeff Layton [this message]
2025-09-25 20:45 ` Anna Schumaker
2025-09-25 21:02   ` Jeff Layton
2025-09-25 21:31     ` Jeff Layton

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=77d7000f15341c20d254a7804e08b3b252cc4e52.camel@kernel.org \
    --to=jlayton@kernel.org \
    --cc=Dai.Ngo@oracle.com \
    --cc=alex.aring@gmail.com \
    --cc=amir73il@gmail.com \
    --cc=anna@kernel.org \
    --cc=bharathsm@microsoft.com \
    --cc=brauner@kernel.org \
    --cc=cem@kernel.org \
    --cc=chuck.lever@oracle.com \
    --cc=code@tyhicks.com \
    --cc=corbet@lwn.net \
    --cc=dakr@kernel.org \
    --cc=dhowells@redhat.com \
    --cc=ecryptfs@vger.kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jack@suse.cz \
    --cc=linkinjeon@kernel.org \
    --cc=linux-cifs@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=linux-unionfs@vger.kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mhiramat@kernel.org \
    --cc=miklos@szeredi.hu \
    --cc=neil@brown.name \
    --cc=netfs@lists.linux.dev \
    --cc=okorniev@redhat.com \
    --cc=pc@manguebit.org \
    --cc=rafael@kernel.org \
    --cc=rick.macklem@gmail.com \
    --cc=ronniesahlberg@gmail.com \
    --cc=rostedt@goodmis.org \
    --cc=samba-technical@lists.samba.org \
    --cc=senozhatsky@chromium.org \
    --cc=sfrench@samba.org \
    --cc=smfrench@gmail.com \
    --cc=sprasad@microsoft.com \
    --cc=tom@talpey.com \
    --cc=trondmy@kernel.org \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.