[PATCH v11 00/20] nfs/nfsd: add support for localio

Mike Snitzer
2024-07-02T16:28:32Z

Hi,

There seems to be consensus that these changes worthwhile and
extensively iterated on. I really appreciate the coordinated
development and review to this point.

I'd very much like these changes to land upstream as-is (unless review
teases out some show-stopper). These changes have been tested fairly
extensively (via xfstests) at this point.

Can we noew please provide formal review tags and merge these changes
through the NFS client tree for 6.11?

Changes since v10:
- Now that XFS will _not_ be patched with "xfs: enable WQ_MEM_RECLAIM
on m_sync_workqueue", reintroduce "nfs/localio: use dedicated workqueues for
filesystem read and write" (patch 18). Also fixed it so that it passes
xfstests generic/355.

FYI:
- I do not intend to rebase this series ontop of NeilBrown's partial
exploration of simplifying away the need for a "fake" svc_rqst
(noble goals and happy to help those changes land upstream as an
incremental improvement):
https://marc.info/?l=linux-nfs&m=171980269529965&w=2

- In addition, tweaks to use nfsd_file_acquire_gc() instead of
nfsd_file_acquire() aren't a priority. Each incremental change
comes with it the potential for regression and we need to lock-down
and stop churning. Happy to explore as incremental improvement and
optimization.

All review and comments are welcome!

Thanks,
Mike

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

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

Mike Snitzer (10):
nfs: factor out {encode,decode}_opaque_fixed to nfs_xdr.h
nfs_common: add NFS LOCALIO auxiliary protocol enablement
nfsd: add Kconfig options to allow localio to be enabled
nfsd: manage netns reference in nfsd_open_local_fh
nfsd: use percpu_ref to interlock nfsd_destroy_serv and nfsd_open_local_fh
nfsd: implement server support for NFS_LOCALIO_PROGRAM
nfs: fix nfs_localio_vfs_getattr() to properly support v4
SUNRPC: remove call_allocate() BUG_ON if p_arglen=0 to allow RPC with void arg
nfs: implement client support for NFS_LOCALIO_PROGRAM
nfs: add Documentation/filesystems/nfs/localio.rst

NeilBrown (1):
SUNRPC: replace program list with program array

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 (6):
SUNRPC: add rpcauth_map_to_svc_cred_local
nfsd: add "localio" support
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
nfs: add "localio" support

Documentation/filesystems/nfs/localio.rst | 135 ++++
fs/Kconfig | 3 +
fs/nfs/Kconfig | 14 +
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 | 61 +-
fs/nfs/localio.c | 891 ++++++++++++++++++++++
fs/nfs/nfs4xdr.c | 13 -
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 | 74 ++
fs/nfsd/Kconfig | 14 +
fs/nfsd/Makefile | 1 +
fs/nfsd/filecache.c | 2 +-
fs/nfsd/localio.c | 329 ++++++++
fs/nfsd/netns.h | 12 +-
fs/nfsd/nfsctl.c | 2 +-
fs/nfsd/nfsd.h | 2 +-
fs/nfsd/nfssvc.c | 116 ++-
fs/nfsd/trace.h | 3 +-
fs/nfsd/vfs.h | 9 +
include/linux/nfs.h | 9 +
include/linux/nfs_fs.h | 2 +
include/linux/nfs_fs_sb.h | 10 +
include/linux/nfs_xdr.h | 20 +-
include/linux/nfslocalio.h | 42 +
include/linux/sunrpc/auth.h | 4 +
include/linux/sunrpc/svc.h | 7 +-
net/sunrpc/auth.c | 15 +
net/sunrpc/clnt.c | 1 -
net/sunrpc/svc.c | 68 +-
net/sunrpc/svc_xprt.c | 2 +-
net/sunrpc/svcauth_unix.c | 3 +-
44 files changed, 2089 insertions(+), 154 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

--
2.44.0