mbox series

[v6,00/18] nfs/nfsd: add support for localio

Message ID 20240619204032.93740-1-snitzer@kernel.org (mailing list archive)
Headers show
Series nfs/nfsd: add support for localio | expand

Message

Mike Snitzer June 19, 2024, 8:40 p.m. UTC
Hi,

This v6 changes include:
- Quite a bit of rebasing to eliminate intermediate steps that include
  throwaway code (thanks to Jeff Layton for calling those out).
- Moved the Kconfig changes to the end of the series to ensure that
  localio cannot be enabled until the code is feature complete.
- Removed needless nfsd_serv_sync() call from nfsd_create_serv().
- Removed inline from fs/nfsd/localio.c:nfs_stat_to_errno
- Wrapped localio struct nfs_client members and related
  fs/nfs/client.c init code with #if IS_ENABLED(CONFIG_NFS_LOCALIO)
- Requested a unique RPC program number from IANA but switched to
  using 0x20000002 until one is assigned.
- Improved the Documentation and some code comments.

Otherwise, not a lot of actual code changes.

My git tree is here:
https://git.kernel.org/pub/scm/linux/kernel/git/snitzer/linux.git/

This v6 is both branch nfs-localio-for-6.11 (always tracks latest)
and nfs-localio-for-6.11.v6

Branches nfs-localio-for-6.11.v[12345] are also available.

To see the changes from v5 to v6 please do:
git remote add snitzer git://git.kernel.org/pub/scm/linux/kernel/git/snitzer/linux.git
git remote update snitzer
git diff snitzer/nfs-localio-for-6.11.v5 snitzer/nfs-localio-for-6.11.v6

All review and comments are welcome!

Thanks,
Mike

Mike Snitzer (10):
  nfs_common: add NFS LOCALIO auxiliary protocol enablement
  nfsd/localio: manage netns reference in nfsd_open_local_fh
  nfs: implement v3 and v4 client support for NFS_LOCALIO_PROGRAM
  nfsd: implement v3 and v4 server support for NFS_LOCALIO_PROGRAM
  nfs/nfsd: consolidate {encode,decode}_opaque_fixed in nfs_xdr.h
  nfsd: prepare to use SRCU to dereference nn->nfsd_serv
  nfsd: use SRCU to dereference nn->nfsd_serv
  nfsd/localio: use SRCU to dereference nn->nfsd_serv in nfsd_open_local_fh
  nfs: add Documentation/filesystems/nfs/localio.rst
  nfs/nfsd: add Kconfig options to allow localio to be enabled

Trond Myklebust (3):
  NFS: Enable localio for non-pNFS I/O
  pnfs/flexfiles: Enable localio for flexfiles I/O
  nfs/localio: use dedicated workqueues for filesystem read and write

Weston Andros Adamson (5):
  nfs: pass nfs_client to nfs_initiate_pgio
  nfs: pass descriptor thru nfs_initiate_pgio path
  nfs: pass struct file to nfs_init_pgio and nfs_init_commit
  sunrpc: add rpcauth_map_to_svc_cred_local
  nfs/nfsd: add "localio" support

 Documentation/filesystems/nfs/localio.rst | 148 ++++
 fs/Kconfig                                |   3 +
 fs/nfs/Kconfig                            |  30 +
 fs/nfs/Makefile                           |   1 +
 fs/nfs/blocklayout/blocklayout.c          |   6 +-
 fs/nfs/client.c                           |  15 +-
 fs/nfs/filelayout/filelayout.c            |  16 +-
 fs/nfs/flexfilelayout/flexfilelayout.c    | 131 +++-
 fs/nfs/flexfilelayout/flexfilelayout.h    |   2 +
 fs/nfs/flexfilelayout/flexfilelayoutdev.c |   6 +
 fs/nfs/inode.c                            |  61 +-
 fs/nfs/internal.h                         |  88 ++-
 fs/nfs/localio.c                          | 850 ++++++++++++++++++++++
 fs/nfs/nfs3_fs.h                          |   1 +
 fs/nfs/nfs3client.c                       |  25 +
 fs/nfs/nfs3proc.c                         |   3 +
 fs/nfs/nfs3xdr.c                          |  58 ++
 fs/nfs/nfs4_fs.h                          |   2 +
 fs/nfs/nfs4client.c                       |  23 +
 fs/nfs/nfs4proc.c                         |   3 +
 fs/nfs/nfs4xdr.c                          |  65 +-
 fs/nfs/nfstrace.h                         |  61 ++
 fs/nfs/pagelist.c                         |  32 +-
 fs/nfs/pnfs.c                             |  24 +-
 fs/nfs/pnfs.h                             |   6 +-
 fs/nfs/pnfs_nfs.c                         |   2 +-
 fs/nfs/write.c                            |  13 +-
 fs/nfs_common/Makefile                    |   3 +
 fs/nfs_common/nfslocalio.c                |  71 ++
 fs/nfsd/Kconfig                           |  30 +
 fs/nfsd/Makefile                          |   1 +
 fs/nfsd/filecache.c                       |  15 +-
 fs/nfsd/localio.c                         | 398 ++++++++++
 fs/nfsd/netns.h                           |  18 +-
 fs/nfsd/nfs4state.c                       |  25 +-
 fs/nfsd/nfsctl.c                          |  28 +-
 fs/nfsd/nfsd.h                            |  11 +
 fs/nfsd/nfssvc.c                          | 181 ++++-
 fs/nfsd/trace.h                           |   3 +-
 fs/nfsd/vfs.h                             |   9 +
 fs/nfsd/xdr.h                             |   6 +
 include/linux/nfs.h                       |   2 +
 include/linux/nfs_fs.h                    |   2 +
 include/linux/nfs_fs_sb.h                 |  10 +
 include/linux/nfs_xdr.h                   |  31 +-
 include/linux/nfslocalio.h                |  41 ++
 include/linux/sunrpc/auth.h               |   4 +
 include/uapi/linux/nfs.h                  |   4 +
 net/sunrpc/auth.c                         |  15 +
 49 files changed, 2438 insertions(+), 145 deletions(-)
 create mode 100644 Documentation/filesystems/nfs/localio.rst
 create mode 100644 fs/nfs/localio.c
 create mode 100644 fs/nfs_common/nfslocalio.c
 create mode 100644 fs/nfsd/localio.c
 create mode 100644 include/linux/nfslocalio.h

Comments

Mike Snitzer June 20, 2024, 5:04 a.m. UTC | #1
On Wed, Jun 19, 2024 at 04:40:14PM -0400, Mike Snitzer wrote:
> Hi,
> 
> This v6 changes include:
> - Quite a bit of rebasing to eliminate intermediate steps that include
>   throwaway code (thanks to Jeff Layton for calling those out).
> - Moved the Kconfig changes to the end of the series to ensure that
>   localio cannot be enabled until the code is feature complete.
> - Removed needless nfsd_serv_sync() call from nfsd_create_serv().
> - Removed inline from fs/nfsd/localio.c:nfs_stat_to_errno
> - Wrapped localio struct nfs_client members and related
>   fs/nfs/client.c init code with #if IS_ENABLED(CONFIG_NFS_LOCALIO)
> - Requested a unique RPC program number from IANA but switched to
>   using 0x20000002 until one is assigned.
> - Improved the Documentation and some code comments.
> 
> Otherwise, not a lot of actual code changes.
> 
> My git tree is here:
> https://git.kernel.org/pub/scm/linux/kernel/git/snitzer/linux.git/

FYI, I've staged some will-be v7 improvements (mainly to client code)
in the nfs-localio-for-6.11 branch:

- factored out duplicate localio xdr code
- moved the too-large-to-inline nfs_init_localioclient to localio.c

Just a heads-up without spamming with another patchbomb.

Mike