[GIT PULL] nfsd changes for v6.7 (early)

From: Chuck Lever III
Date: Wed Oct 25 2023 - 10:24:10 EST


Hi Linus-

The following changes since commit 58720809f52779dc0f08e53e54b014209d13eebb:

Linux 6.6-rc6 (2023-10-15 13:34:39 -0700)

are available in the Git repository at:

https://git.kernel.org/pub/scm/linux/kernel/git/cel/linux.git tags/nfsd-6.7

for you to fetch changes up to 3fd2ca5be07f6a43211591a45b43df9e7b6eba00:

svcrdma: Fix tracepoint printk format (2023-10-16 12:44:40 -0400)

----------------------------------------------------------------
NFSD 6.7 Release Notes

This release completes the SunRPC thread scheduler work that was
begun in v6.6. The scheduler can now find an svc thread to wake in
constant time and without a list walk. Thanks again to Neil Brown
for this overhaul.

Lorenzo Bianconi contributed infrastructure for a netlink-based
NFSD control plane. The long-term plan is to provide the same
functionality as found in /proc/fs/nfsd, plus some interesting
additions, and then migrate the NFSD user space utilities to
netlink.

A long series to overhaul NFSD's NFSv4 operation encoding was
applied in this release. The goals are to bring this family of
encoding functions in line with the matching NFSv4 decoding
functions and with the NFSv2 and NFSv3 XDR functions, preparing
the way for better memory safety and maintainability.

A further improvement to NFSD's write delegation support was
contributed by Dai Ngo. This adds a CB_GETATTR callback,
enabling the server to retrieve cached size and mtime data from
clients holding write delegations. If the server can retrieve
this information, it does not have to recall the delegation in
some cases.

The usual panoply of bug fixes and minor improvements round out
this release. As always I am grateful to all contributors,
reviewers, and testers.

----------------------------------------------------------------
Alexander Aring (4):
lockd: introduce safe async lock op
lockd: don't call vfs_lock_file() for pending requests
lockd: fix race in async lock request handling
lockd: add doc to enable EXPORT_OP_ASYNC_LOCK

Chuck Lever (92):
SUNRPC: Clean up bc_svc_process()
tools: ynl: Add source files for nfsd netlink protocol
SUNRPC: Remove BUG_ON call sites
NFSD: Add simple u32, u64, and bool encoders
NFSD: Rename nfsd4_encode_bitmap()
NFSD: Clean up nfsd4_encode_setattr()
NFSD: Add struct nfsd4_fattr_args
NFSD: Add nfsd4_encode_fattr4__true()
NFSD: Add nfsd4_encode_fattr4__false()
NFSD: Add nfsd4_encode_fattr4_supported_attrs()
NFSD: Add nfsd4_encode_fattr4_type()
NFSD: Add nfsd4_encode_fattr4_fh_expire_type()
NFSD: Add nfsd4_encode_fattr4_change()
NFSD: Add nfsd4_encode_fattr4_size()
NFSD: Add nfsd4_encode_fattr4_fsid()
NFSD: Add nfsd4_encode_fattr4_lease_time()
NFSD: Add nfsd4_encode_fattr4_rdattr_error()
NFSD: Add nfsd4_encode_fattr4_aclsupport()
NFSD: Add nfsd4_encode_nfsace4()
NFSD: Add nfsd4_encode_fattr4_acl()
NFSD: Add nfsd4_encode_fattr4_filehandle()
NFSD: Add nfsd4_encode_fattr4_fileid()
NFSD: Add nfsd4_encode_fattr4_files_avail()
NFSD: Add nfsd4_encode_fattr4_files_free()
NFSD: Add nfsd4_encode_fattr4_files_total()
NFSD: Add nfsd4_encode_fattr4_fs_locations()
NFSD: Add nfsd4_encode_fattr4_maxfilesize()
NFSD: Add nfsd4_encode_fattr4_maxlink()
NFSD: Add nfsd4_encode_fattr4_maxname()
NFSD: Add nfsd4_encode_fattr4_maxread()
NFSD: Add nfsd4_encode_fattr4_maxwrite()
NFSD: Add nfsd4_encode_fattr4_mode()
NFSD: Add nfsd4_encode_fattr4_numlinks()
NFSD: Add nfsd4_encode_fattr4_owner()
NFSD: Add nfsd4_encode_fattr4_owner_group()
NFSD: Add nfsd4_encode_fattr4_rawdev()
NFSD: Add nfsd4_encode_fattr4_space_avail()
NFSD: Add nfsd4_encode_fattr4_space_free()
NFSD: Add nfsd4_encode_fattr4_space_total()
NFSD: Add nfsd4_encode_fattr4_space_used()
NFSD: Add nfsd4_encode_fattr4_time_access()
NFSD: Add nfsd4_encode_fattr4_time_create()
NFSD: Add nfsd4_encode_fattr4_time_delta()
NFSD: Add nfsd4_encode_fattr4_time_metadata()
NFSD: Add nfsd4_encode_fattr4_time_modify()
NFSD: Add nfsd4_encode_fattr4_mounted_on_fileid()
NFSD: Add nfsd4_encode_fattr4_fs_layout_types()
NFSD: Add nfsd4_encode_fattr4_layout_types()
NFSD: Add nfsd4_encode_fattr4_layout_blksize()
NFSD: Add nfsd4_encode_fattr4_suppattr_exclcreat()
NFSD: Add nfsd4_encode_fattr4_sec_label()
NFSD: Add nfsd4_encode_fattr4_xattr_support()
NFSD: Copy FATTR4 bit number definitions from RFCs
NFSD: Use a bitmask loop to encode FATTR4 results
NFSD: Rename nfsd4_encode_fattr()
NFSD: Add nfsd4_encode_count4()
NFSD: Clean up nfsd4_encode_stateid()
NFSD: Make @lgp parameter of ->encode_layoutget a const pointer
NFSD: Clean up nfsd4_encode_layoutget()
NFSD: Clean up nfsd4_encode_layoutcommit()
NFSD: Clean up nfsd4_encode_layoutreturn()
NFSD: Make @gdev parameter of ->encode_getdeviceinfo a const pointer
NFSD: Clean up nfsd4_encode_getdeviceinfo()
NFSD: Remove a layering violation when encoding lock_denied
NFSD: Add nfsd4_encode_lock_owner4()
NFSD: Refactor nfsd4_encode_lock_denied()
NFSD: Add nfsd4_encode_open_read_delegation4()
NFSD: Add nfsd4_encode_open_write_delegation4()
NFSD: Add nfsd4_encode_open_none_delegation4()
NFSD: Add nfsd4_encode_open_delegation4()
NFSD: Clean up nfsd4_encode_open()
NFSD: Add a utility function for encoding sessionid4 objects
NFSD: Add nfsd4_encode_channel_attr4()
NFSD: Restructure nfsd4_encode_create_session()
NFSD: Clean up nfsd4_encode_sequence()
NFSD: Rename nfsd4_encode_dirent()
NFSD: Clean up nfsd4_encode_rdattr_error()
NFSD: Add an nfsd4_encode_nfs_cookie4() helper
NFSD: Clean up nfsd4_encode_entry4()
NFSD: Clean up nfsd4_encode_readdir()
NFSD: Clean up nfsd4_encode_access()
NFSD: Clean up nfsd4_do_encode_secinfo()
NFSD: Clean up nfsd4_encode_exchange_id()
NFSD: Clean up nfsd4_encode_test_stateid()
NFSD: Clean up nfsd4_encode_copy()
NFSD: Clean up nfsd4_encode_copy_notify()
NFSD: Clean up nfsd4_encode_offset_status()
NFSD: Clean up nfsd4_encode_seek()
NFSD: Rewrite synopsis of nfsd_percpu_counters_init()
NFSD: Fix frame size warning in svc_export_parse()
svcrdma: Drop connection after an RDMA Read error
svcrdma: Fix tracepoint printk format

Dai Ngo (4):
NFSD: initialize copy->cp_clp early in nfsd4_copy for use by trace point
NFSD: add trace points to track server copy progress
NFSD: add support for CB_GETATTR callback
NFSD: handle GETATTR conflict with write delegation

KaiLong Wang (3):
NFSD: Clean up errors in stats.c
nfsd: Clean up errors in nfs4state.c
nfsd: Clean up errors in nfs3proc.c

Kinglong Mee (1):
nfs: fix the typo of rfc number about xattr in NFSv4

Lorenzo Bianconi (2):
NFSD: introduce netlink stubs
NFSD: add rpc_status netlink support

NeilBrown (18):
SUNRPC: move all of xprt handling into svc_xprt_handle()
SUNRPC: rename and refactor svc_get_next_xprt()
SUNRPC: integrate back-channel processing with svc_recv()
lockd: hold a reference to nlmsvc_serv while stopping the thread.
SUNRPC: change how svc threads are asked to exit.
SUNRPC: add list of idle threads
SUNRPC: discard SP_CONGESTED
llist: add interface to check if a node is on a list.
SUNRPC: change service idle list to be an llist
llist: add llist_del_first_this()
lib: add light-weight queuing mechanism.
SUNRPC: rename some functions from rqst_ to svc_thread_
SUNRPC: only have one thread waking up at a time
SUNRPC: use lwq for sp_sockets - renamed to sp_xprts
SUNRPC: change sp_nrthreads to atomic_t
SUNRPC: discard sp_lock
SUNRPC: change the back-channel queue to lwq
NFSD: simplify error paths in nfsd_svc()

Sicong Huang (1):
NFSD: clean up alloc_init_deleg()

Trond Myklebust (2):
nfsd: Handle EOPENSTALE correctly in the filecache
nfsd: Don't reset the write verifier on a commit EAGAIN

Documentation/filesystems/nfs/exporting.rst | 7 +
Documentation/netlink/specs/nfsd.yaml | 89 +++
fs/lockd/svc.c | 7 +-
fs/lockd/svclock.c | 43 +-
fs/locks.c | 12 +-
fs/nfs/callback.c | 46 +-
fs/nfsd/Makefile | 3 +-
fs/nfsd/blocklayoutxdr.c | 6 +-
fs/nfsd/blocklayoutxdr.h | 4 +-
fs/nfsd/export.c | 32 +-
fs/nfsd/export.h | 4 +-
fs/nfsd/filecache.c | 27 +-
fs/nfsd/flexfilelayoutxdr.c | 6 +-
fs/nfsd/flexfilelayoutxdr.h | 4 +-
fs/nfsd/netlink.c | 32 ++
fs/nfsd/netlink.h | 22 +
fs/nfsd/nfs3proc.c | 5 +-
fs/nfsd/nfs4callback.c | 97 +++-
fs/nfsd/nfs4layouts.c | 6 +-
fs/nfsd/nfs4proc.c | 32 +-
fs/nfsd/nfs4state.c | 156 +++++-
fs/nfsd/nfs4xdr.c | 2700 ++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------------------------
fs/nfsd/nfsctl.c | 203 +++++++
fs/nfsd/nfsd.h | 17 +
fs/nfsd/nfsfh.c | 2 +-
fs/nfsd/nfsfh.h | 3 +-
fs/nfsd/nfssvc.c | 42 +-
fs/nfsd/pnfs.h | 6 +-
fs/nfsd/state.h | 27 +-
fs/nfsd/stats.c | 4 +-
fs/nfsd/stats.h | 18 +-
fs/nfsd/trace.h | 87 +++
fs/nfsd/vfs.c | 61 ++-
fs/nfsd/vfs.h | 4 +-
fs/nfsd/xdr4.h | 154 +++++-
fs/nfsd/xdr4cb.h | 18 +
include/linux/exportfs.h | 14 +
include/linux/iversion.h | 2 +-
include/linux/llist.h | 46 ++
include/linux/lockd/lockd.h | 2 +-
include/linux/lwq.h | 124 +++++
include/linux/nfs4.h | 262 ++++++---
include/linux/sunrpc/svc.h | 45 +-
include/linux/sunrpc/svc_xprt.h | 2 +-
include/linux/sunrpc/xprt.h | 3 +-
include/trace/events/rpcrdma.h | 10 +-
include/trace/events/sunrpc.h | 1 -
include/uapi/linux/nfsd_netlink.h | 39 ++
lib/Kconfig | 5 +
lib/Makefile | 2 +-
lib/llist.c | 28 +
lib/lwq.c | 158 ++++++
net/sunrpc/backchannel_rqst.c | 13 +-
net/sunrpc/svc.c | 155 +++---
net/sunrpc/svc_xprt.c | 238 ++++----
net/sunrpc/xprtrdma/backchannel.c | 6 +-
net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 3 +-
tools/net/ynl/Makefile.deps | 1 +
tools/net/ynl/generated/Makefile | 2 +-
tools/net/ynl/generated/nfsd-user.c | 95 ++++
tools/net/ynl/generated/nfsd-user.h | 33 ++
61 files changed, 3531 insertions(+), 1744 deletions(-)
create mode 100644 Documentation/netlink/specs/nfsd.yaml
create mode 100644 fs/nfsd/netlink.c
create mode 100644 fs/nfsd/netlink.h
create mode 100644 include/linux/lwq.h
create mode 100644 include/uapi/linux/nfsd_netlink.h
create mode 100644 lib/lwq.c
create mode 100644 tools/net/ynl/generated/nfsd-user.c
create mode 100644 tools/net/ynl/generated/nfsd-user.h

--
Chuck Lever