[PATCH v4 0/9] nfsd: implement the "delstid" draft

Jeff Layton posted 9 patches 1 month, 3 weeks ago
Documentation/sunrpc/xdr/nfs4_1.x    | 166 ++++++++++++++++++++++++
fs/nfsd/Makefile                     |  17 ++-
fs/nfsd/nfs4callback.c               |  51 +++++++-
fs/nfsd/nfs4proc.c                   |  29 ++++-
fs/nfsd/nfs4state.c                  | 132 ++++++++++++++++---
fs/nfsd/nfs4xdr.c                    | 119 ++++++++++++++---
fs/nfsd/nfs4xdr_gen.c                | 239 +++++++++++++++++++++++++++++++++++
fs/nfsd/nfs4xdr_gen.h                |  25 ++++
fs/nfsd/nfsd.h                       |   5 +-
fs/nfsd/state.h                      |   6 +-
fs/nfsd/xdr4cb.h                     |  10 +-
include/linux/nfs4.h                 |   7 +-
include/linux/nfs_xdr.h              |   5 -
include/linux/sunrpc/xdrgen/nfs4_1.h | 124 ++++++++++++++++++
include/linux/time64.h               |   5 +
include/uapi/linux/nfs4.h            |   7 +-
16 files changed, 881 insertions(+), 66 deletions(-)
[PATCH v4 0/9] nfsd: implement the "delstid" draft
Posted by Jeff Layton 1 month, 3 weeks ago
We had to pull this series from v6.11 due to a report of a fs_mark file
creation performance regression from the kernel test robot [1]. I tried to
reproduce this and couldn't. I've asked Oliver to see if this is still
reproducible there but haven't heard back yet.

During this, we realized that not handing out an updated open stateid
when there is an existing one is problematic [2], so this also fixes the
server to only respect WANT_OPEN_XOR_DELEGATION if the open stateid
is brand new.

At this point, I think we ought to put this in nfsd-next again and see
whether this peformance regression manifests again. If it does, it's not
clear whether this is a client or server problem, since enabling that
support affects how the client behaves as well.

[1]: https://lore.kernel.org/linux-nfs/202409161645.d44bced5-oliver.sang@intel.com/
[2]: https://mailarchive.ietf.org/arch/msg/nfsv4/3TPw2DEVAv3oe7_D8mxkoFl57h4/

Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
Changes in v4:
- rebase onto Chuck's latest xdrgen patches
- ignore WANT_OPEN_XOR_DELEGATION flag if there is an extant open stateid
- consolidate patches that fix handling of delegated change attr
- Link to v3: https://lore.kernel.org/r/20240829-delstid-v3-0-271c60806c5d@kernel.org

Changes in v3:
- fix includes in nfs4xdr_gen.c
- drop ATTR_CTIME_DLG flag (just use ATTR_DELEG instead)
- proper handling for SETATTR (maybe? Outstanding q about stateid here)
- incorporate Neil's patches for handling non-delegation leases
- always return times from CB_GETATTR instead of from local vfs_getattr
- fix potential races vs. mgtimes by moving ctime handling into VFS layer
- Link to v2: https://lore.kernel.org/r/20240826-delstid-v2-0-e8ab5c0e39cc@kernel.org

Changes in v2:
- rebase onto Chuck's lkxdrgen branch, and reworked how autogenerated
  code is included
- declare nfsd_open_arguments as a global, so it doesn't have to be
  set up on the stack each time
- delegated timestamp support has been added
- Link to v1: https://lore.kernel.org/r/20240816-delstid-v1-0-c221c3dc14cd@kernel.org

---
Jeff Layton (9):
      nfsd: drop the ncf_cb_bmap field
      nfsd: drop the nfsd4_fattr_args "size" field
      nfsd: have nfsd4_deleg_getattr_conflict pass back write deleg pointer
      nfsd: fix handling of delegated change attr in CB_GETATTR
      nfs_common: make include/linux/nfs4.h include generated nfs4_1.h
      nfsd: add support for FATTR4_OPEN_ARGUMENTS
      nfsd: implement OPEN_ARGS_SHARE_ACCESS_WANT_OPEN_XOR_DELEGATION
      nfsd: add support for delegated timestamps
      nfsd: handle delegated timestamps in SETATTR

 Documentation/sunrpc/xdr/nfs4_1.x    | 166 ++++++++++++++++++++++++
 fs/nfsd/Makefile                     |  17 ++-
 fs/nfsd/nfs4callback.c               |  51 +++++++-
 fs/nfsd/nfs4proc.c                   |  29 ++++-
 fs/nfsd/nfs4state.c                  | 132 ++++++++++++++++---
 fs/nfsd/nfs4xdr.c                    | 119 ++++++++++++++---
 fs/nfsd/nfs4xdr_gen.c                | 239 +++++++++++++++++++++++++++++++++++
 fs/nfsd/nfs4xdr_gen.h                |  25 ++++
 fs/nfsd/nfsd.h                       |   5 +-
 fs/nfsd/state.h                      |   6 +-
 fs/nfsd/xdr4cb.h                     |  10 +-
 include/linux/nfs4.h                 |   7 +-
 include/linux/nfs_xdr.h              |   5 -
 include/linux/sunrpc/xdrgen/nfs4_1.h | 124 ++++++++++++++++++
 include/linux/time64.h               |   5 +
 include/uapi/linux/nfs4.h            |   7 +-
 16 files changed, 881 insertions(+), 66 deletions(-)
---
base-commit: 5653776cd85de4823ec954ec5830909e073dacce
change-id: 20240815-delstid-93290691ad11

Best regards,
-- 
Jeff Layton <jlayton@kernel.org>
Re: [PATCH v4 0/9] nfsd: implement the "delstid" draft
Posted by cel@kernel.org 1 month, 2 weeks ago
From: Chuck Lever <chuck.lever@oracle.com>

On Fri, 04 Oct 2024 09:16:43 -0400, Jeff Layton wrote:                                              
> We had to pull this series from v6.11 due to a report of a fs_mark file
> creation performance regression from the kernel test robot [1]. I tried to
> reproduce this and couldn't. I've asked Oliver to see if this is still
> reproducible there but haven't heard back yet.
> 
> During this, we realized that not handing out an updated open stateid
> when there is an existing one is problematic [2], so this also fixes the
> server to only respect WANT_OPEN_XOR_DELEGATION if the open stateid
> is brand new.
> 
> [...]                                                                        

Applied to nfsd-next for v6.13, thanks!                                                                

[1/9] nfsd: drop the ncf_cb_bmap field
      commit: be4c44221f4d066d3726a4712133f69690ac680b
[2/9] nfsd: drop the nfsd4_fattr_args "size" field
      commit: 43f2357392c457616b623ed9eb14ddfb009a37f8
[3/9] nfsd: have nfsd4_deleg_getattr_conflict pass back write deleg pointer
      commit: fcfcbf7764811c90226da385bec30800f29240cb
[4/9] nfsd: fix handling of delegated change attr in CB_GETATTR
      commit: 99ce540b196c8ba7137cdb54d1f8dfdb2f8ebf0e
[5/9] nfs_common: make include/linux/nfs4.h include generated nfs4_1.h
      commit: d1e2a01bdbf0cd1b3d0cf4b576a495b7bb2706b0
[6/9] nfsd: add support for FATTR4_OPEN_ARGUMENTS
      commit: bba1dc5b66342e54fcc0b710e6317a076b732bab
[7/9] nfsd: implement OPEN_ARGS_SHARE_ACCESS_WANT_OPEN_XOR_DELEGATION
      commit: e816ca3f9ee0832a30c7947feb137142676d8673
[8/9] nfsd: add support for delegated timestamps
      commit: 82ad9af82af79a49ea3b18df06008e8614f9c3e9
[9/9] nfsd: handle delegated timestamps in SETATTR
      commit: ba47874bd44a65d23e67f9b6666eb2475ea1c077                                                                      

--                                                                              
Chuck Lever