[PATCH v3 00/13] vfs: recall-only directory delegations for knfsd

Jeff Layton posted 13 patches 3 months, 2 weeks ago
There is a newer version of this series
drivers/base/devtmpfs.c    |   6 +-
fs/cachefiles/namei.c      |   2 +-
fs/ecryptfs/inode.c        |  10 +--
fs/fcntl.c                 |   9 +++
fs/fuse/dir.c              |   1 +
fs/init.c                  |   6 +-
fs/locks.c                 |  68 +++++++++++++++-----
fs/namei.c                 | 150 +++++++++++++++++++++++++++++++++++----------
fs/nfs/nfs4file.c          |   2 +
fs/nfsd/filecache.c        |  57 ++++++++++++-----
fs/nfsd/filecache.h        |   2 +
fs/nfsd/nfs3proc.c         |   2 +-
fs/nfsd/nfs4proc.c         |  22 ++++++-
fs/nfsd/nfs4recover.c      |   6 +-
fs/nfsd/nfs4state.c        | 103 ++++++++++++++++++++++++++++++-
fs/nfsd/state.h            |   5 ++
fs/nfsd/vfs.c              |  16 ++---
fs/nfsd/vfs.h              |   2 +-
fs/open.c                  |   2 +-
fs/overlayfs/overlayfs.h   |  10 +--
fs/smb/client/cifsfs.c     |   3 +
fs/smb/server/vfs.c        |   8 +--
fs/xfs/scrub/orphanage.c   |   2 +-
include/linux/filelock.h   |  12 ++++
include/linux/fs.h         |  13 ++--
include/uapi/linux/fcntl.h |  10 +++
net/unix/af_unix.c         |   2 +-
27 files changed, 425 insertions(+), 106 deletions(-)
[PATCH v3 00/13] vfs: recall-only directory delegations for knfsd
Posted by Jeff Layton 3 months, 2 weeks ago
Behold, another version of directory delegations. This version contains
support for recall-only delegations. Support for CB_NOTIFY will be
forthcoming (once the client-side patches have caught up).

This main differences in this version are bugfixes, but the last patch
adds a more formal API for userland to request a delegation. That
support is optional. We can drop it and the rest of the series should be
fine.

My main interest in making delegations available to userland is to allow
testing this support without nfsd. I have an xfstest ready to submit for
this if that support looks acceptable. If it is, then I'll also plan to
submit an update for fcntl(2).

Christian, Chuck mentioned he was fine with you merging the nfsd bits
too, if you're willing to take the whole pile.

Thanks!
Jeff

Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
Changes in v3:
- Fix potential nfsd_file refcount leaks on GET_DIR_DELEGATION error
- Add missing parent dir deleg break in vfs_symlink()
- Add F_SETDELEG/F_GETDELEG support to fcntl()
- Link to v2: https://lore.kernel.org/r/20251017-dir-deleg-ro-v2-0-8c8f6dd23c8b@kernel.org

Changes in v2:
- handle lease conflict resolution inside of nfsd
- drop the lm_may_setlease lock_manager operation
- just add extra argument to vfs_create() instead of creating wrapper
- don't allocate fsnotify_mark for open directories
- Link to v1: https://lore.kernel.org/r/20251013-dir-deleg-ro-v1-0-406780a70e5e@kernel.org

---
Jeff Layton (13):
      filelock: push the S_ISREG check down to ->setlease handlers
      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
      vfs: make vfs_symlink break delegations on parent dir
      filelock: lift the ban on directory leases in generic_setlease
      nfsd: allow filecache to hold S_IFDIR files
      nfsd: allow DELEGRETURN on directories
      nfsd: wire up GET_DIR_DELEGATION handling
      vfs: expose delegation support to userland

 drivers/base/devtmpfs.c    |   6 +-
 fs/cachefiles/namei.c      |   2 +-
 fs/ecryptfs/inode.c        |  10 +--
 fs/fcntl.c                 |   9 +++
 fs/fuse/dir.c              |   1 +
 fs/init.c                  |   6 +-
 fs/locks.c                 |  68 +++++++++++++++-----
 fs/namei.c                 | 150 +++++++++++++++++++++++++++++++++++----------
 fs/nfs/nfs4file.c          |   2 +
 fs/nfsd/filecache.c        |  57 ++++++++++++-----
 fs/nfsd/filecache.h        |   2 +
 fs/nfsd/nfs3proc.c         |   2 +-
 fs/nfsd/nfs4proc.c         |  22 ++++++-
 fs/nfsd/nfs4recover.c      |   6 +-
 fs/nfsd/nfs4state.c        | 103 ++++++++++++++++++++++++++++++-
 fs/nfsd/state.h            |   5 ++
 fs/nfsd/vfs.c              |  16 ++---
 fs/nfsd/vfs.h              |   2 +-
 fs/open.c                  |   2 +-
 fs/overlayfs/overlayfs.h   |  10 +--
 fs/smb/client/cifsfs.c     |   3 +
 fs/smb/server/vfs.c        |   8 +--
 fs/xfs/scrub/orphanage.c   |   2 +-
 include/linux/filelock.h   |  12 ++++
 include/linux/fs.h         |  13 ++--
 include/uapi/linux/fcntl.h |  10 +++
 net/unix/af_unix.c         |   2 +-
 27 files changed, 425 insertions(+), 106 deletions(-)
---
base-commit: d2ced3cadfab04c7e915adf0a73c53fcf1642719
change-id: 20251013-dir-deleg-ro-d0fe19823b21

Best regards,
-- 
Jeff Layton <jlayton@kernel.org>
Re: [PATCH v3 00/13] vfs: recall-only directory delegations for knfsd
Posted by Christian Brauner 3 months, 1 week ago
On Tue, Oct 21, 2025 at 11:25:35AM -0400, Jeff Layton wrote:
> Behold, another version of directory delegations. This version contains
> support for recall-only delegations. Support for CB_NOTIFY will be
> forthcoming (once the client-side patches have caught up).
> 
> This main differences in this version are bugfixes, but the last patch
> adds a more formal API for userland to request a delegation. That
> support is optional. We can drop it and the rest of the series should be
> fine.
> 
> My main interest in making delegations available to userland is to allow
> testing this support without nfsd. I have an xfstest ready to submit for
> this if that support looks acceptable. If it is, then I'll also plan to
> submit an update for fcntl(2).
> 
> Christian, Chuck mentioned he was fine with you merging the nfsd bits
> too, if you're willing to take the whole pile.

Absolutely!
Re: [PATCH v3 00/13] vfs: recall-only directory delegations for knfsd
Posted by Christian Brauner 3 months, 1 week ago
On Tue, Oct 21, 2025 at 11:25:35AM -0400, Jeff Layton wrote:
> Behold, another version of directory delegations. This version contains
> support for recall-only delegations. Support for CB_NOTIFY will be
> forthcoming (once the client-side patches have caught up).
> 
> This main differences in this version are bugfixes, but the last patch
> adds a more formal API for userland to request a delegation. That
> support is optional. We can drop it and the rest of the series should be
> fine.
> 
> My main interest in making delegations available to userland is to allow
> testing this support without nfsd. I have an xfstest ready to submit for
> this if that support looks acceptable. If it is, then I'll also plan to
> submit an update for fcntl(2).
> 
> Christian, Chuck mentioned he was fine with you merging the nfsd bits
> too, if you're willing to take the whole pile.

This all looks good to me btw. The only thing I'm having issues with is:

 Base: base-commit d2ced3cadfab04c7e915adf0a73c53fcf1642719 not known, ignoring
 Base: attempting to guess base-commit...
 Base: tags/v6.18-rc1-23-g2c09630d09c6 (best guess, 21/27 blobs matched)
 Base: v6.18-rc1
Magic: Preparing a sparse worktree
Unable to cleanly apply series, see failure log below
---
Applying: filelock: push the S_ISREG check down to ->setlease handlers
Applying: vfs: add try_break_deleg calls for parents to vfs_{link,rename,unlink}
Applying: vfs: allow mkdir to wait for delegation break on parent
Applying: vfs: allow rmdir to wait for delegation break on parent
Patch failed at 0004 vfs: allow rmdir to wait for delegation break on parent
error: invalid object 100644 423dd102b51198ea7c447be2b9a0a5020c950dba for 'fs/nfsd/nfs4recover.c'
error: Repository lacks necessary blobs to fall back on 3-way merge.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
hint: When you have resolved this problem, run "git am --continue".
hint: If you prefer to skip this patch, run "git am --skip" instead.
hint: To restore the original branch and stop patching, run "git am --abort".
hint: Disable this message with "git config advice.mergeConflict false"

That commit isn't in -next nor in any of my branches?
Can you resend on top of: vfs-6.19.directory.delegations please?

> 
> Thanks!
> Jeff
> 
> Signed-off-by: Jeff Layton <jlayton@kernel.org>
> ---
> Changes in v3:
> - Fix potential nfsd_file refcount leaks on GET_DIR_DELEGATION error
> - Add missing parent dir deleg break in vfs_symlink()
> - Add F_SETDELEG/F_GETDELEG support to fcntl()
> - Link to v2: https://lore.kernel.org/r/20251017-dir-deleg-ro-v2-0-8c8f6dd23c8b@kernel.org
> 
> Changes in v2:
> - handle lease conflict resolution inside of nfsd
> - drop the lm_may_setlease lock_manager operation
> - just add extra argument to vfs_create() instead of creating wrapper
> - don't allocate fsnotify_mark for open directories
> - Link to v1: https://lore.kernel.org/r/20251013-dir-deleg-ro-v1-0-406780a70e5e@kernel.org
> 
> ---
> Jeff Layton (13):
>       filelock: push the S_ISREG check down to ->setlease handlers
>       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
>       vfs: make vfs_symlink break delegations on parent dir
>       filelock: lift the ban on directory leases in generic_setlease
>       nfsd: allow filecache to hold S_IFDIR files
>       nfsd: allow DELEGRETURN on directories
>       nfsd: wire up GET_DIR_DELEGATION handling
>       vfs: expose delegation support to userland
> 
>  drivers/base/devtmpfs.c    |   6 +-
>  fs/cachefiles/namei.c      |   2 +-
>  fs/ecryptfs/inode.c        |  10 +--
>  fs/fcntl.c                 |   9 +++
>  fs/fuse/dir.c              |   1 +
>  fs/init.c                  |   6 +-
>  fs/locks.c                 |  68 +++++++++++++++-----
>  fs/namei.c                 | 150 +++++++++++++++++++++++++++++++++++----------
>  fs/nfs/nfs4file.c          |   2 +
>  fs/nfsd/filecache.c        |  57 ++++++++++++-----
>  fs/nfsd/filecache.h        |   2 +
>  fs/nfsd/nfs3proc.c         |   2 +-
>  fs/nfsd/nfs4proc.c         |  22 ++++++-
>  fs/nfsd/nfs4recover.c      |   6 +-
>  fs/nfsd/nfs4state.c        | 103 ++++++++++++++++++++++++++++++-
>  fs/nfsd/state.h            |   5 ++
>  fs/nfsd/vfs.c              |  16 ++---
>  fs/nfsd/vfs.h              |   2 +-
>  fs/open.c                  |   2 +-
>  fs/overlayfs/overlayfs.h   |  10 +--
>  fs/smb/client/cifsfs.c     |   3 +
>  fs/smb/server/vfs.c        |   8 +--
>  fs/xfs/scrub/orphanage.c   |   2 +-
>  include/linux/filelock.h   |  12 ++++
>  include/linux/fs.h         |  13 ++--
>  include/uapi/linux/fcntl.h |  10 +++
>  net/unix/af_unix.c         |   2 +-
>  27 files changed, 425 insertions(+), 106 deletions(-)
> ---
> base-commit: d2ced3cadfab04c7e915adf0a73c53fcf1642719
> change-id: 20251013-dir-deleg-ro-d0fe19823b21
> 
> Best regards,
> -- 
> Jeff Layton <jlayton@kernel.org>
>
Re: [PATCH v3 00/13] vfs: recall-only directory delegations for knfsd
Posted by Jeff Layton 3 months, 1 week ago
On Wed, 2025-10-29 at 14:38 +0100, Christian Brauner wrote:
> On Tue, Oct 21, 2025 at 11:25:35AM -0400, Jeff Layton wrote:
> > Behold, another version of directory delegations. This version contains
> > support for recall-only delegations. Support for CB_NOTIFY will be
> > forthcoming (once the client-side patches have caught up).
> > 
> > This main differences in this version are bugfixes, but the last patch
> > adds a more formal API for userland to request a delegation. That
> > support is optional. We can drop it and the rest of the series should be
> > fine.
> > 
> > My main interest in making delegations available to userland is to allow
> > testing this support without nfsd. I have an xfstest ready to submit for
> > this if that support looks acceptable. If it is, then I'll also plan to
> > submit an update for fcntl(2).
> > 
> > Christian, Chuck mentioned he was fine with you merging the nfsd bits
> > too, if you're willing to take the whole pile.
> 
> This all looks good to me btw. The only thing I'm having issues with is:
> 
>  Base: base-commit d2ced3cadfab04c7e915adf0a73c53fcf1642719 not known, ignoring
>  Base: attempting to guess base-commit...
>  Base: tags/v6.18-rc1-23-g2c09630d09c6 (best guess, 21/27 blobs matched)
>  Base: v6.18-rc1
> Magic: Preparing a sparse worktree
> Unable to cleanly apply series, see failure log below
> ---
> Applying: filelock: push the S_ISREG check down to ->setlease handlers
> Applying: vfs: add try_break_deleg calls for parents to vfs_{link,rename,unlink}
> Applying: vfs: allow mkdir to wait for delegation break on parent
> Applying: vfs: allow rmdir to wait for delegation break on parent
> Patch failed at 0004 vfs: allow rmdir to wait for delegation break on parent
> error: invalid object 100644 423dd102b51198ea7c447be2b9a0a5020c950dba for 'fs/nfsd/nfs4recover.c'
> error: Repository lacks necessary blobs to fall back on 3-way merge.
> hint: Use 'git am --show-current-patch=diff' to see the failed patch
> hint: When you have resolved this problem, run "git am --continue".
> hint: If you prefer to skip this patch, run "git am --skip" instead.
> hint: To restore the original branch and stop patching, run "git am --abort".
> hint: Disable this message with "git config advice.mergeConflict false"
> 
> That commit isn't in -next nor in any of my branches?
> Can you resend on top of: vfs-6.19.directory.delegations please?
> 

Will do. It's a simple fix. I had based this on top of fs-next, which
has Chuck's tree in it too.

> > 
> > Thanks!
> > Jeff
> > 
> > Signed-off-by: Jeff Layton <jlayton@kernel.org>
> > ---
> > Changes in v3:
> > - Fix potential nfsd_file refcount leaks on GET_DIR_DELEGATION error
> > - Add missing parent dir deleg break in vfs_symlink()
> > - Add F_SETDELEG/F_GETDELEG support to fcntl()
> > - Link to v2: https://lore.kernel.org/r/20251017-dir-deleg-ro-v2-0-8c8f6dd23c8b@kernel.org
> > 
> > Changes in v2:
> > - handle lease conflict resolution inside of nfsd
> > - drop the lm_may_setlease lock_manager operation
> > - just add extra argument to vfs_create() instead of creating wrapper
> > - don't allocate fsnotify_mark for open directories
> > - Link to v1: https://lore.kernel.org/r/20251013-dir-deleg-ro-v1-0-406780a70e5e@kernel.org
> > 
> > ---
> > Jeff Layton (13):
> >       filelock: push the S_ISREG check down to ->setlease handlers
> >       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
> >       vfs: make vfs_symlink break delegations on parent dir
> >       filelock: lift the ban on directory leases in generic_setlease
> >       nfsd: allow filecache to hold S_IFDIR files
> >       nfsd: allow DELEGRETURN on directories
> >       nfsd: wire up GET_DIR_DELEGATION handling
> >       vfs: expose delegation support to userland
> > 
> >  drivers/base/devtmpfs.c    |   6 +-
> >  fs/cachefiles/namei.c      |   2 +-
> >  fs/ecryptfs/inode.c        |  10 +--
> >  fs/fcntl.c                 |   9 +++
> >  fs/fuse/dir.c              |   1 +
> >  fs/init.c                  |   6 +-
> >  fs/locks.c                 |  68 +++++++++++++++-----
> >  fs/namei.c                 | 150 +++++++++++++++++++++++++++++++++++----------
> >  fs/nfs/nfs4file.c          |   2 +
> >  fs/nfsd/filecache.c        |  57 ++++++++++++-----
> >  fs/nfsd/filecache.h        |   2 +
> >  fs/nfsd/nfs3proc.c         |   2 +-
> >  fs/nfsd/nfs4proc.c         |  22 ++++++-
> >  fs/nfsd/nfs4recover.c      |   6 +-
> >  fs/nfsd/nfs4state.c        | 103 ++++++++++++++++++++++++++++++-
> >  fs/nfsd/state.h            |   5 ++
> >  fs/nfsd/vfs.c              |  16 ++---
> >  fs/nfsd/vfs.h              |   2 +-
> >  fs/open.c                  |   2 +-
> >  fs/overlayfs/overlayfs.h   |  10 +--
> >  fs/smb/client/cifsfs.c     |   3 +
> >  fs/smb/server/vfs.c        |   8 +--
> >  fs/xfs/scrub/orphanage.c   |   2 +-
> >  include/linux/filelock.h   |  12 ++++
> >  include/linux/fs.h         |  13 ++--
> >  include/uapi/linux/fcntl.h |  10 +++
> >  net/unix/af_unix.c         |   2 +-
> >  27 files changed, 425 insertions(+), 106 deletions(-)
> > ---
> > base-commit: d2ced3cadfab04c7e915adf0a73c53fcf1642719
> > change-id: 20251013-dir-deleg-ro-d0fe19823b21
> > 
> > Best regards,
> > -- 
> > Jeff Layton <jlayton@kernel.org>
> > 

-- 
Jeff Layton <jlayton@kernel.org>