2024-06-12 03:08:36

by Mike Snitzer

[permalink] [raw]
Subject: [RFC PATCH v2 00/15] nfs/nfsd: add support for localio

Hi,

This patch series rebases "localio" changes that Hammerspace (and
Primary Data before it) has been carrying since 2014. The reason they
weren't proposed for upstream inclusion until now was the handshake
for whether or not a client and server are local was brittle, for more
context please see this commit from v1:
https://git.kernel.org/pub/scm/linux/kernel/git/snitzer/linux.git/commit/?h=nfs-localio-for-6.11.v1&id=8069f78e10f8fa4dd6aa6ba3ad643de6f95be6f6

Aside from rebasing the original changes from a 5.15.130-stable
kernel, my contribution to this series started with making the localio
handshake more robust. To do so a new LOCALIO protocol extension has
been added to both NFS v3 and v4. It follows the well-worn pattern
established by the ACL protocol extension.

These changes have proven stable against various test scenarios:
1) client and server both on localhost (for both v3 and v4.2)
2) various permutations of client and server support enablement for
both local and remote client and server.
3) client on host, server within a container (for both v3 and v4.2)
My container testing was in terms of podman managed containers.

That said, v2 is "RFC" because it still lacks proper refcounting on
nn->nfsd_serv and I need help on how others would like to see that
happen given svc_get/svc_put were removed with commit 1e3577a4521e
("SUNRPC: discard sv_refcnt, and svc_get/svc_put").

* Changes since v1: lots of folding and rebasing of patches to try to
minimize needless preservation of old code that later patches
removed. Dropped patches that weren't needed. Some renames and
comments. Some refactoring of nfsiod_start.

All review and comments are welcome!

Thanks,
Mike

Mike Snitzer (6):
nfs_common: add NFS LOCALIO protocol extension enablement
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
nfs/localio: move managing nfsd_open_local_fh symbol to nfs_common
nfs/nfsd: ensure localio server always uses its network namespace

Peng Tao (1):
nfs: move nfs_stat_to_errno to nfs.h

Trond Myklebust (3):
NFS: for localio don't call filesystem read() and write() routines
directly
NFS: Enable localio for non-pNFS I/O
pnfs/flexfiles: Enable localio for flexfiles I/O

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

fs/Kconfig | 3 +
fs/nfs/Kconfig | 25 +
fs/nfs/Makefile | 2 +
fs/nfs/blocklayout/blocklayout.c | 6 +-
fs/nfs/client.c | 17 +-
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 | 96 ++-
fs/nfs/localio.c | 830 ++++++++++++++++++++++
fs/nfs/nfs2xdr.c | 69 --
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 | 25 +
fs/nfsd/Makefile | 2 +
fs/nfsd/filecache.c | 2 +-
fs/nfsd/localio.c | 330 +++++++++
fs/nfsd/netns.h | 4 +
fs/nfsd/nfsd.h | 11 +
fs/nfsd/nfssvc.c | 93 ++-
fs/nfsd/trace.h | 3 +-
fs/nfsd/vfs.h | 9 +
fs/nfsd/xdr.h | 6 +
include/linux/nfs.h | 65 ++
include/linux/nfs_fs.h | 2 +
include/linux/nfs_fs_sb.h | 9 +
include/linux/nfs_xdr.h | 31 +-
include/linux/nfslocalio.h | 39 +
include/linux/sunrpc/auth.h | 4 +
include/uapi/linux/nfs.h | 4 +
net/sunrpc/auth.c | 17 +
47 files changed, 2146 insertions(+), 166 deletions(-)
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