From: Mike Snitzer <snitzer@kernel.org>
To: linux-nfs@vger.kernel.org
Cc: Jeff Layton <jlayton@kernel.org>,
Chuck Lever <chuck.lever@oracle.com>,
Anna Schumaker <anna@kernel.org>,
Trond Myklebust <trondmy@hammerspace.com>,
NeilBrown <neilb@suse.de>,
linux-fsdevel@vger.kernel.org
Subject: [PATCH v12 00/24] nfs/nfsd: add support for localio
Date: Mon, 19 Aug 2024 14:17:05 -0400 [thread overview]
Message-ID: <20240819181750.70570-1-snitzer@kernel.org> (raw)
These latest changes are available in my git tree here:
https://git.kernel.org/pub/scm/linux/kernel/git/snitzer/linux.git/log/?h=nfs-localio-for-next
Significant progress was made on the entire series, I implemented all
3 changes NeilBrown suggested here:
https://marc.info/?l=linux-nfs&m=172004547710968&w=2
And Neil kindly provided review of a preliminary v12 that I then used
to refine this final v12 further. Neil found the series much cleaner
and approachable.
This v12 also switches the NFS client's localio code over to driving
IO in terms of nfsd's nfsd_file (rather than a simple file pointer).
I checked with Jeff Layton and he likes the switch to using nfsd_file
(Jeff did suggest I make sure to keep struct nfsd_file completely
opaque to the client). Proper use of nfsd_file provides a solid
performance improvement (as detailed in the last patch's commit
header) thanks especially to the nfsd filecache's GC feature (which
localio now makes use of).
Testing:
- Chuck's kdevops NFS testing has been operating against the
nfs-localio-for-next branch for a while now (not sure if LOCALIO is
enabled or if Chuck is just verifying the branch works with LOCALIO
disabled).
- Verified all of Hammerspace's various sanity tests pass (this
includes numerous pNFS and flexfiles tests).
Please review, I'm hopeful I've addressed any outstanding issues and
that these changes worthy of being merged for v6.12. If you see
something, say something ;)
Changes since v11:
- The required localio specific changes in fs/nfsd/ are much simpler
(thanks to the prelim patches that update common code to support the
the localio case, fs/nfsd/localio.c in particular is now very lean)
- Improved the localio protocol to address NeilBrown's issue #1.
Replaced GETUUID with UUID_IS_LOCAL RPC, which inverts protocol such
that client generates a nonce (shortlived single-use UUID) and
proceeds to verify the server sees it in nfs_common.
- this eliminated the need to add 'struct nfsd_uuid' to nfsd_net
- Finished the RFC series NeilBrown started to introduce
nfsd_file_acquire_local(), enables the use of a "fake" svc_rqst to
be eliminated: https://marc.info/?l=linux-nfs&m=171980269529965&w=2
(uses auth_domain as suggested, addresses NeilBrown's issue #2)
- rpcauth_map_clnt_to_svc_cred_local now uses userns of client and
from_{kuid,kgid}_munged (hopefully addresses NeilBrown's issue #3)
- Updated nfs_local_call_write() to override_creds() with the cred
used by the client to open the localio file.
- To avoid localio hitting writeback deadlock (same as is done for
existing loopback NFSD support in nfsd_vfs_write() function): set
PF_LOCAL_THROTTLE | PF_MEMALLOC_NOIO in nfs_local_call_write() and
restore current->flags before return.
- Factored nfs_stat_to_errno and nfs4_stat_to_errno out to nfs_common
to eliminate localio code creating yet another copy of them.
(eliminates existing duplication between fs/nfs/nfs[23]xdr.c)
- Simplified Kconfig so that NFS_LOCALIO depends on NFS_FS and
NFSD_LOCALIO depends on NFSD.
- Only support localio if UNIX Authentication (AUTH_UNIX) is used.
- Improved workqueue patch to not use wait_for_completion().
- Dropped 2 prelim fs/nfs/ patches that weren't actually needed.
- Updated localio.rst to reflect the various changes listed above,
also added a new "FAQ" section from Trond (which was informed by an
in-person discussion about localio that Trond had with Christoph).
- Fixed "nfsd: add nfsd_file_acquire_local()" commit to work with
NFSv3 (had been testing with NFSv4.2 and the fact that NFSv3
regressed due to 'nfs_ver' not being properly initialized for
non-LOCALIO callers was missed.
- Fixed issue Neil reported where "When using localio, if I open,
read, don't close, then try to stop the server and umount the
exported filesystem I get EBUSY for the umount."
- fix by removing refcount on localio file (no longer cache open
localio file in the client).
- Fixed nfsd tracepoints that were impacted by the possibility they'd
be passed a NULL rqstp when using localio.
- Rebased on cel/nfsd-next (based on v6.11-rc4) to layer upon Neil's
various changes that were originally motivated by LOCALIO, reduces
footprint of this patchset.
- Exported nfsd_file interfaces needed to switch the nfs client's
localio code over to using it.
- Switched the the nfs client's localio code over to using nfsd_file.
Thanks,
Mike
Mike Snitzer (13):
nfs_common: factor out nfs_errtbl and nfs_stat_to_errno
nfs_common: factor out nfs4_errtbl and nfs4_stat_to_errno
nfs: factor out {encode,decode}_opaque_fixed to nfs_xdr.h
nfsd: fix nfsfh tracepoints to properly handle NULL rqstp
SUNRPC: remove call_allocate() BUG_ONs
nfs_common: add NFS LOCALIO auxiliary protocol enablement
nfsd: implement server support for NFS_LOCALIO_PROGRAM
nfs: implement client support for NFS_LOCALIO_PROGRAM
nfs: add Documentation/filesystems/nfs/localio.rst
nfsd: use GC for nfsd_file returned by nfsd_file_acquire_local
nfs_common: expose localio's required nfsd symbols to nfs client
nfs: push localio nfsd_file_put call out to client
nfs: switch client to use nfsd_file for localio
NeilBrown (3):
nfsd: factor out __fh_verify to allow NULL rqstp to be passed
nfsd: add nfsd_file_acquire_local()
SUNRPC: replace program list with program array
Trond Myklebust (4):
nfs: enable localio for non-pNFS IO
pnfs/flexfiles: enable localio support
nfs/localio: use dedicated workqueues for filesystem read and write
nfs: add FAQ section to Documentation/filesystems/nfs/localio.rst
Weston Andros Adamson (4):
SUNRPC: add rpcauth_map_clnt_to_svc_cred_local
nfsd: add localio support
nfs: pass struct file to nfs_init_pgio and nfs_init_commit
nfs: add localio support
Documentation/filesystems/nfs/localio.rst | 255 +++++++
fs/Kconfig | 3 +
fs/nfs/Kconfig | 15 +
fs/nfs/Makefile | 1 +
fs/nfs/client.c | 15 +-
fs/nfs/filelayout/filelayout.c | 6 +-
fs/nfs/flexfilelayout/flexfilelayout.c | 142 +++-
fs/nfs/flexfilelayout/flexfilelayout.h | 2 +
fs/nfs/flexfilelayout/flexfilelayoutdev.c | 6 +
fs/nfs/inode.c | 57 +-
fs/nfs/internal.h | 61 +-
fs/nfs/localio.c | 784 ++++++++++++++++++++++
fs/nfs/nfs2xdr.c | 70 +-
fs/nfs/nfs3xdr.c | 108 +--
fs/nfs/nfs4xdr.c | 84 +--
fs/nfs/nfstrace.h | 61 ++
fs/nfs/pagelist.c | 16 +-
fs/nfs/pnfs_nfs.c | 2 +-
fs/nfs/write.c | 12 +-
fs/nfs_common/Makefile | 5 +
fs/nfs_common/common.c | 134 ++++
fs/nfs_common/nfslocalio.c | 194 ++++++
fs/nfsd/Kconfig | 15 +
fs/nfsd/Makefile | 1 +
fs/nfsd/export.c | 8 +-
fs/nfsd/filecache.c | 90 ++-
fs/nfsd/filecache.h | 5 +
fs/nfsd/localio.c | 183 +++++
fs/nfsd/netns.h | 8 +-
fs/nfsd/nfsctl.c | 2 +-
fs/nfsd/nfsd.h | 6 +-
fs/nfsd/nfsfh.c | 114 ++--
fs/nfsd/nfsfh.h | 5 +
fs/nfsd/nfssvc.c | 100 ++-
fs/nfsd/trace.h | 39 +-
fs/nfsd/vfs.h | 10 +
include/linux/nfs.h | 9 +
include/linux/nfs_common.h | 17 +
include/linux/nfs_fs_sb.h | 10 +
include/linux/nfs_xdr.h | 20 +-
include/linux/nfslocalio.h | 56 ++
include/linux/sunrpc/auth.h | 4 +
include/linux/sunrpc/svc.h | 7 +-
net/sunrpc/auth.c | 22 +
net/sunrpc/clnt.c | 6 -
net/sunrpc/svc.c | 68 +-
net/sunrpc/svc_xprt.c | 2 +-
net/sunrpc/svcauth_unix.c | 3 +-
48 files changed, 2428 insertions(+), 415 deletions(-)
create mode 100644 Documentation/filesystems/nfs/localio.rst
create mode 100644 fs/nfs/localio.c
create mode 100644 fs/nfs_common/common.c
create mode 100644 fs/nfs_common/nfslocalio.c
create mode 100644 fs/nfsd/localio.c
create mode 100644 include/linux/nfs_common.h
create mode 100644 include/linux/nfslocalio.h
--
2.44.0
next reply other threads:[~2024-08-19 18:17 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-19 18:17 Mike Snitzer [this message]
2024-08-19 18:17 ` [PATCH v12 01/24] nfs_common: factor out nfs_errtbl and nfs_stat_to_errno Mike Snitzer
2024-08-19 18:17 ` [PATCH v12 02/24] nfs_common: factor out nfs4_errtbl and nfs4_stat_to_errno Mike Snitzer
2024-08-19 18:17 ` [PATCH v12 03/24] nfs: factor out {encode,decode}_opaque_fixed to nfs_xdr.h Mike Snitzer
2024-08-19 18:17 ` [PATCH v12 04/24] nfsd: factor out __fh_verify to allow NULL rqstp to be passed Mike Snitzer
2024-08-19 18:17 ` [PATCH v12 05/24] nfsd: fix nfsfh tracepoints to properly handle NULL rqstp Mike Snitzer
2024-08-21 17:46 ` Jeff Layton
2024-08-21 21:23 ` Mike Snitzer
2024-08-22 15:07 ` Chuck Lever
2024-08-22 16:04 ` Mike Snitzer
2024-08-22 17:07 ` Jeff Layton
2024-08-22 17:20 ` Mike Snitzer
2024-08-22 18:14 ` Chuck Lever III
2024-08-19 18:17 ` [PATCH v12 06/24] nfsd: add nfsd_file_acquire_local() Mike Snitzer
2024-08-19 18:17 ` [PATCH v12 07/24] SUNRPC: remove call_allocate() BUG_ONs Mike Snitzer
2024-08-19 18:17 ` [PATCH v12 08/24] SUNRPC: add rpcauth_map_clnt_to_svc_cred_local Mike Snitzer
2024-08-19 18:17 ` [PATCH v12 09/24] nfs_common: add NFS LOCALIO auxiliary protocol enablement Mike Snitzer
2024-08-21 18:04 ` Jeff Layton
2024-08-21 18:39 ` Jeff Layton
2024-08-19 18:17 ` [PATCH v12 10/24] nfsd: add localio support Mike Snitzer
2024-08-19 18:17 ` [PATCH v12 11/24] nfsd: implement server support for NFS_LOCALIO_PROGRAM Mike Snitzer
2024-08-19 18:17 ` [PATCH v12 12/24] SUNRPC: replace program list with program array Mike Snitzer
2024-08-21 18:31 ` Jeff Layton
2024-08-21 20:40 ` Mike Snitzer
2024-08-21 21:43 ` Mike Snitzer
2024-08-19 18:17 ` [PATCH v12 13/24] nfs: pass struct file to nfs_init_pgio and nfs_init_commit Mike Snitzer
2024-08-19 18:17 ` [PATCH v12 14/24] nfs: add localio support Mike Snitzer
2024-08-19 18:17 ` [PATCH v12 15/24] nfs: enable localio for non-pNFS IO Mike Snitzer
2024-08-19 18:17 ` [PATCH v12 16/24] pnfs/flexfiles: enable localio support Mike Snitzer
2024-08-19 18:17 ` [PATCH v12 17/24] nfs/localio: use dedicated workqueues for filesystem read and write Mike Snitzer
2024-08-19 18:17 ` [PATCH v12 18/24] nfs: implement client support for NFS_LOCALIO_PROGRAM Mike Snitzer
2024-08-19 18:17 ` [PATCH v12 19/24] nfs: add Documentation/filesystems/nfs/localio.rst Mike Snitzer
2024-08-19 18:17 ` [PATCH v12 20/24] nfsd: use GC for nfsd_file returned by nfsd_file_acquire_local Mike Snitzer
2024-08-21 18:34 ` Jeff Layton
2024-08-19 18:17 ` [PATCH v12 21/24] nfs_common: expose localio's required nfsd symbols to nfs client Mike Snitzer
2024-08-19 18:17 ` [PATCH v12 22/24] nfs: push localio nfsd_file_put call out to client Mike Snitzer
2024-08-21 18:50 ` Jeff Layton
2024-08-19 18:17 ` [PATCH v12 23/24] nfs: switch client to use nfsd_file for localio Mike Snitzer
2024-08-19 18:17 ` [PATCH v12 24/24] nfs: add FAQ section to Documentation/filesystems/nfs/localio.rst Mike Snitzer
2024-08-21 19:03 ` Jeff Layton
2024-08-21 20:12 ` Mike Snitzer
2024-08-21 20:14 ` Mike Snitzer
2024-08-21 23:46 ` Jeff Layton
2024-08-19 18:29 ` [PATCH v12 00/24] nfs/nfsd: add support for localio Chuck Lever III
2024-08-19 18:43 ` Mike Snitzer
2024-08-21 19:20 ` Jeff Layton
2024-08-21 20:05 ` Mike Snitzer
2024-08-22 12:35 ` Jeff Layton
2024-08-22 2:00 ` Mike Snitzer
2024-08-22 12:50 ` Jeff Layton
2024-08-22 15:18 ` Chuck Lever III
2024-08-22 15:42 ` Mike Snitzer
2024-08-21 19:56 ` Chuck Lever
2024-08-21 20:10 ` Mike Snitzer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240819181750.70570-1-snitzer@kernel.org \
--to=snitzer@kernel.org \
--cc=anna@kernel.org \
--cc=chuck.lever@oracle.com \
--cc=jlayton@kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=neilb@suse.de \
--cc=trondmy@hammerspace.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).