From: Chuck Lever <cel@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Jeff Layton <jlayton@kernel.org>, <linux-nfs@vger.kernel.org>,
<linux-kernel@vger.kernel.org>
Subject: [GIT PULL] NFSD changes for v7.4
Date: Thu, 22 Oct 2026 15:15:30 -0400 [thread overview]
Message-ID: <20261022191536.3094786-1-cel@kernel.org> (raw)
The following changes since commit a90ee4305c4a5df72c11b31dacfdc76e00fcf78a:
Linux 7.3-rc6 (2026-10-04 13:45:25 -0700)
are available in the Git repository at:
https://git.kernel.org/pub/scm/linux/kernel/git/cel/linux.git tags/nfsd-7.4
for you to fetch changes up to eafb6de800781f0a1be5cdd98d150620041d8b27:
SUNRPC: use assign_bit() where applicable (2026-10-11 23:13:07 -0400)
----------------------------------------------------------------
NFSD 7.4 Release Notes
Jeff Layton extended the netlink listener-set operation so that a
management daemon can register NFSD's programs with rpcbind itself.
This prevents an unresponsive rpcbind from stalling NFSD adminis-
tration for a minute at a time.
Bulk delegation recall now adjusts the number of delegations it
wants returned, based on memory pressure. The previous mechanism
was spec-conformant, but it requested all delegations to be
returned at once. Clients are free to return few or none in such
cases, but requesting smaller batches of delegations is more
neighborly.
In preparation for handling TLS KeyUpdate, the server's TCP receive
path has been reworked to handle control records. In the process,
the use of sock_recvmsg was replaced with ->read_sock, which contends
less with other holders of the socket lock.
NFSv2 XDR code is now generated by xdrgen, which mechanically
generates the encoders and decoders from the RPC language
specification for the protocol. Replacing hand-built XDR code
makes prototyping new protocol elements faster, reduces errors, and
improves memory safety. Replacement of XDR code for newer NFS
versions will continue in subsequent releases of NFSD.
The remaining bulk of changes in v7.4 is bug fixes, clean-ups, and
small optimizations. Sincere thanks to all contributors, reviewers,
testers, and bug reporters who participated in the v7.4 NFSD
development cycle.
----------------------------------------------------------------
Aldo Ariel Panzardo (5):
nfsd: propagate SETXATTR value decode errors
NFSD: copy SETXATTR data from all XDR buffer segments
nfsd: zero NFSv4 COMPOUND tag padding
nfsd: clear XDR padding in GETXATTR replies
nfsd: use xdr_encode_opaque_fixed for all GETXATTR fragments
Ameer Hamza (4):
nfsd: fix race between client_info_show() and free_client()
sunrpc: treat empty auth.unix.gid replies as negative entries
sunrpc: honor the netlink unix_gid NEGATIVE flag
nfsd: don't modify a session slot when replaying its cached reply
Cen Zhang (Microsoft Security FORGE Labs) (1):
nfsd: hold cl_lock in client_has_openowners()
Chris Mason (1):
sunrpc: pin gss module across auth_domain RCU free
Chuck Lever (124):
NFSD: Move XDR encoding helpers out of xdr4.h
NFSD: Move pre-xdr'ed status codes out of nfsd.h
NFSD: Remove two unused NFSv4 constants
NFSD: Relocate NFSv4-internal constants to state.h
NFSD: Evacuate NFSv4 entry-point prototypes from nfsd.h
NFSD: Move nfsd_v4client() out of nfsd.h
NFSD: Map flex file layout IDs through the request's user namespace
NFS: Add linux/nfs_fh.h
lockd: Switch linux/nfs.h to linux/nfs_fh.h
NFSD: Use struct knfsd_fh in struct pnfs_ff_layout
nfs_common: Remove unused nfs_ssc_client_ops infrastructure
NFSD: Hoist nfs42_ssc_open() into fs/nfs_common/nfs_ssc.c
nfs_common: Synchronize access to the SSC client ops table
NFSD: Split linux/nfs_ssc.h
NFS: Move definition of enum nfs3_stable_how
NFSD: Replace nfsd_write()'s "stable" argument with "iocb_flags"
NFSD: Move the RPC program definition for LOCALIO
nfs_common: Remove "#include <linux/nfs.h>" from linux/nfslocalio.h
NFSD: Tighten header includes in localio.c
NFSD: Name the fh_maxsize value that carries no NFS version
NFSD: Don't apply NFS version-specific behavior to LOCALIO requests
NFSD: Budget the CB_SEQUENCE opcode and referring call array count
NFSD: Budget the CB_RECALL truncate field
NFSD: Budget the CB_LAYOUTRECALL recall stateid
NFSD: Budget the CB_OFFLOAD opcode
NFSD: Budget the CB_NOTIFY_LOCK opcode
NFSD: Budget the CB_RECALL_ANY opcode
NFSD: Correct locking documentation for delegation sc_status
NFSD: Destroy a recalled delegation the client does not hold
NFSD: Send referring calls with CB_RECALL
NFSD: Point contributors and sashiko.dev to the nfsd-testing branch
SUNRPC: Do not credit control-record octets to the RPC stream
SUNRPC: Reject a TLS alert record that is not two octets
SUNRPC: Treat every TLS error alert as fatal
SUNRPC: Resume receiving after a TLS control record
NFSD: Replace NFS3_ACCESS_FULL in nfsd4_access()
NFSD: Move version-specific ACCESS maps into per-version code
NFSD: Make the write verifier reset helper available outside vfs.c
NFSD: Move NFSv4-specific CLONE logic into nfsd4_clone()
NFSD: Remove xdr-related headers from fs/nfsd/vfs.c
SUNRPC: Reject a socket that already has an svc_sock attached
NFSD: Fail a pool_threads read whose reply does not fit
nfsd: set op->status when an operation's header cannot be encoded
NFSD: Do not send CB_RECALL_ANY to NFSv4.0 clients
NFSD: Count the delegations held by each client
NFSD: Name directory delegations in the CB_RECALL_ANY type mask
NFSD: Send a meaningful CB_RECALL_ANY keep count
NFSD: Count delegations per network namespace
NFSD: Give delegations their own state shrinker
NFSD: Pace the state shrinker's scan requests
NFSD: Apportion CB_RECALL_ANY recalls among clients
NFSD: Move the nfs3.h include out of nfsd.h
NFSD: Include <linux/nfs_fh.h> where struct nfs_fh is used
NFSD: Clean up header guards in fs/nfsd/xdr.h
NFSD: Resolve the recall-any mask names in the trace format
SUNRPC: Separate the TLS control-record receive from its policy
SUNRPC: Close the transport on an unhandled TLS record type
SUNRPC: Flush a received record's pages once it is complete
SUNRPC: Receive RPC records with ->read_sock
SUNRPC: Bypass sock_recvmsg() for the TLS control-record receive
lockd: Fix use-after-free in nlmsvc_retry_blocked
lockd: Serialize block retries against host teardown
NFSD: Fix out-of-bounds read in the rpc_status dump
NFSD: Fix POSIX ACL leak in unexecuted NFSv4 COMPOUND operations
NFS: Import NFS3ERR definitions
NFSD: Rework be32 nfserr definitions
NFSD: Replace the use of include/trace/misc/nfs.h
svcrdma: Grant credits from the clamped sc_max_requests
svcrdma: Clear XPT_DATA when the last receive context is consumed
SUNRPC: Skip xpt_reserved accounting for non-UDP transports
NFSD: Return NFSERR_ISDIR for NFSv2 READ and WRITE on a non-regular file
NFSD: Don't complete a cld upcall the daemon has not read
NFSD: Move the cld upcall message out of the caller's stack frame
NFSD: Complete a cld upcall when copying its reply fails
NFSD: Reject an oversized principal hash from nfsdcld
pnfs/blocklayout: Complete a device upcall only on its own reply
NFSD: Set nn->cld_net before registering the cld pipe
NFSD: Complete a cld upcall when the daemon closes the pipe
pnfs/blocklayout: Complete a device upcall when the pipe is closed
SUNRPC: Copy the deferred RPC Call from the head buffer
NFSD: return NFS4ERR_EXIST for a guarded OPEN of a non-regular object
SUNRPC: Carry a generated-codec context pointer in struct xdr_stream
SUNRPC: Bind the svc_rqst to its XDR streams
SUNRPC: Add svcxdr_encode_opaque_payload()
xdrgen: Pass the containing struct name to member codec emitters
xdrgen: Add a "pragma pages" directive
SUNRPC: Add svcxdr_decode_opaque_payload()
xdrgen: Extend the pages directive to page-resident arguments
xdrgen: Add hook-driven aggregate codec for variable-length arrays
xdrgen: Extend the aggregate codec to optional-data list members
xdrgen: Stream optional-data aggregate lists during encode
xdrgen: Reject a "pragma pages" union arm declared as an opaque
xdrgen: Report unsupported client-side directives without a traceback
xdrgen: Document that aggregate members of a struct share an element type
xdrgen: Update the aggregate_members comment for optional-data lists
NFSD: map fh_verify() status codes for NFS_ACLv2 replies
NFSD: map fh_verify() status codes for NFS_ACLv3 replies
Documentation: Add the RPC language description of NFSv2
NFSD: Add infrastructure for generating NFSv2 XDR encoders and decoders
NFSD: Use xdrgen-generated NFSv2 protocol definitions
NFSD: Remove '#include "xdr.h"' from fs/nfsd/xdr3.h
NFSD: Relocate the NFSv2 XDR storage union into nfsproc.c
NFSD: Use xdrgen XDR functions for the NFSv2 NULL procedure
NFSD: Use xdrgen XDR functions for NFSv2 GETATTR procedure
NFSD: Use xdrgen XDR functions for NFSv2 SETATTR procedure
NFSD: Use xdrgen XDR functions for the NFSv2 ROOT procedure
NFSD: Use xdrgen XDR functions for the NFSv2 LOOKUP procedure
NFSD: Use xdrgen XDR functions for NFSv2 READLINK procedure
NFSD: Use xdrgen XDR functions for NFSv2 READ procedure
NFSD: Use xdrgen XDR functions for the NFSv2 WRITECACHE procedure
NFSD: Use xdrgen XDR functions for NFSv2 WRITE procedure
NFSD: Refactor nfsd_proc_create()
NFSD: Use xdrgen XDR functions for NFSv2 CREATE procedure
NFSD: Use xdrgen XDR functions for the NFSv2 REMOVE procedure
NFSD: Use xdrgen XDR functions for the NFSv2 RENAME procedure
NFSD: Use xdrgen XDR functions for the NFSv2 LINK procedure
NFSD: Use xdrgen XDR functions for NFSv2 SYMLINK procedure
NFSD: Use xdrgen XDR functions for NFSv2 MKDIR procedure
NFSD: Use xdrgen XDR functions for NFSv2 RMDIR procedure
NFSD: Use xdrgen XDR functions for the NFSv2 STATFS procedure
NFSD: Use xdrgen XDR functions for NFSv2 READDIR arguments
NFSD: Add a streaming directory reader
NFSD: Refactor NFSv2 directory cookie encoding
NFSD: Use xdrgen XDR functions for NFSv2 READDIR results
David Flynn (1):
nfsd: fetch direct I/O alignment for files handed to the filecache
Jeff Layton (23):
nfsd: pass caller-provided attrmask storage into nfsd4_setup_notify_entry4()
nfsd: back CB_NOTIFY notify_mask words with per-delegation storage
NFSD: cap the number of listeners accepted in listener_set
NFSD: validate transport name in listener_set before serv creation
SUNRPC: keep the first error in svc_register()
SUNRPC: bound the local rpcbind client timeout to 1s
NFSD: report listener creation failures through extack
SUNRPC: report local rpcbind calls that get no answer
SUNRPC: stop svc_register() once rpcbind stops answering
SUNRPC: stop the svc_unregister() sweep once rpcbind stops answering
SUNRPC: stop unregistering listeners once rpcbind stops answering
NFSD: stop registering with rpcbind after a failure in listener_set
selftests/nfsd: exercise listener_set request validation
selftests/nfsd: add a per-netns rpcbind stub and the listener round-trips
selftests/nfsd: check that listener_set asks rpcbind once
selftests/nfsd: check that listener removal asks rpcbind once
nfsd: don't offer flexfiles layouts when NFSv3 isn't being served
nfsd: shorten extack string returned with dodgy listener
SUNRPC: allow a service to opt out of rpcbind registration
NFSD: add a userspace-rpcbind flag to listener_set
NFSD: honour the userspace-rpcbind flag in listener_set
NFSD: report registerable programs in the listener_set reply
selftests/nfsd: exercise the userspace-rpcbind listener_set flag
Jérémy Jean (2):
nfsd: preflight SEQUENCE replies before accepting a slot
SUNRPC: fix oversized GSS proxy token copy
Karl Mehltretter (2):
NFSD: docs: Fix pNFS SCSI Kconfig symbol
svcrdma: Fix svc_rdma_recv_cid_init() kernel-doc
NeilBrown (17):
nfsd: honour client-provided attributes for NFS4_CREATE_EXCLUSIVE4_1
nfsd: move check_nfsd_access() call into nfsd_cross_mnt()
nfsd: correctly handle CREATE of mounted-on files
nfsd: replace fh_fill_both_attrs() with fh_fill_post_noop()
nfsd: move fh_want_write() after preamble in nfsd4_create_file()
nfsd: move more nfs-specific code into preamble of nfsd4_create_file()
nfsd: remove subtlety from nfsd4_create_file()
nfsd: in nfsd4_create_file() let VFS report if file was created.
nfsd: nfsd4_create_file(): Move NFSD_MAY_CREATE check earlier
nfsd: fh_want_write) failure need not be immediately fatal for nfsd4_create_file()
nfsd: (almost) always open file in nfsd4_create_file()
nfsd: reduce range of directory lock in nfsd4_create_file()
nfsd: open-code nfsd4_vfs_create() into nfsd4_create_file()
nfsd: move some code out of the d_really_is_negative() branch in nfsd4_create_file()
nfsd: reduce want-write range in nfsd4_create_file()
nfsd: move v0 checking out of nfsd_check_obj_isreg()
nfsd: separate out VFS-specific code from nfsd4_create_file()
Peng Fan (1):
SUNRPC: use assign_bit() where applicable
Wentao Liang (1):
nfsd: Fix id-to-name cache entry leak in idtoname_parse()
Zhiling Zou (1):
SUNRPC: trace an accepted transport before publishing it
Zijing Yin (1):
SUNRPC: fix netns use-after-free in write_gssp()
Documentation/admin-guide/nfs/pnfs-scsi-server.rst | 2 +-
Documentation/netlink/specs/nfsd.yaml | 55 +-
Documentation/sunrpc/xdr/nfs2.x | 254 +++
MAINTAINERS | 4 +-
fs/lockd/svc.c | 1 -
fs/lockd/svclock.c | 33 +-
fs/lockd/trace.h | 1 -
fs/lockd/xdr.h | 2 +-
fs/namei.c | 2 +
fs/nfs/blocklayout/blocklayout.h | 5 -
fs/nfs/blocklayout/rpc_pipefs.c | 79 +-
fs/nfs/netns.h | 5 +-
fs/nfs/nfs4file.c | 1 +
fs/nfs/super.c | 25 -
fs/nfs_common/common.c | 5 +-
fs/nfs_common/nfs_ssc.c | 126 +-
fs/nfsd/Makefile | 15 +-
fs/nfsd/blocklayout.c | 1 +
fs/nfsd/blocklayoutxdr.c | 11 +
fs/nfsd/export.c | 8 +-
fs/nfsd/export.h | 3 +-
fs/nfsd/filecache.c | 5 +-
fs/nfsd/flexfilelayout.c | 24 +-
fs/nfsd/flexfilelayoutxdr.c | 9 +-
fs/nfsd/flexfilelayoutxdr.h | 8 +-
fs/nfsd/localio.c | 10 +-
fs/nfsd/lockd.c | 5 +-
fs/nfsd/netlink.c | 5 +-
fs/nfsd/netns.h | 17 +-
fs/nfsd/nfs2acl.c | 66 +-
fs/nfsd/nfs2xdr_gen.c | 1079 ++++++++++++
fs/nfsd/nfs2xdr_gen.h | 46 +
fs/nfsd/nfs3acl.c | 16 +
fs/nfsd/nfs3proc.c | 79 +-
fs/nfsd/nfs3xdr.c | 6 +
fs/nfsd/nfs4acl.c | 1 +
fs/nfsd/nfs4callback.c | 8 +-
fs/nfsd/nfs4ctl.h | 83 +
fs/nfsd/nfs4idmap.c | 5 +-
fs/nfsd/nfs4layouts.c | 5 +-
fs/nfsd/nfs4proc.c | 475 +++---
fs/nfsd/nfs4recover.c | 92 +-
fs/nfsd/nfs4state.c | 587 ++++++-
fs/nfsd/nfs4xdr.c | 227 ++-
fs/nfsd/nfscache.c | 1 +
fs/nfsd/nfsctl.c | 323 +++-
fs/nfsd/nfsd.h | 243 +--
fs/nfsd/nfserr.h | 159 ++
fs/nfsd/nfsfh.c | 73 +-
fs/nfsd/nfsfh.h | 33 +-
fs/nfsd/nfsproc.c | 1597 ++++++++++++------
fs/nfsd/nfssvc.c | 74 +-
fs/nfsd/nfsxdr.c | 606 ++-----
fs/nfsd/state.h | 46 +-
fs/nfsd/trace.h | 45 +-
fs/nfsd/vfs.c | 537 +++---
fs/nfsd/vfs.h | 79 +-
fs/nfsd/xdr.h | 173 +-
fs/nfsd/xdr3.h | 5 +-
fs/nfsd/xdr4.h | 156 +-
fs/nfsd/xdr4cb.h | 20 +-
include/linux/nfs.h | 55 +-
include/linux/nfs3.h | 43 +
include/linux/nfs4.h | 6 +
include/linux/nfs_common.h | 4 +-
include/linux/nfs_fh.h | 63 +
include/linux/nfs_ssc.h | 69 +-
include/linux/nfsd_ssc.h | 38 +
include/linux/nfslocalio.h | 11 +-
include/linux/sunrpc/clnt.h | 3 +-
include/linux/sunrpc/svc.h | 95 +-
include/linux/sunrpc/svc_rdma.h | 2 +-
include/linux/sunrpc/svc_xprt.h | 5 +-
include/linux/sunrpc/xdr.h | 1 +
include/linux/sunrpc/xdrgen/_defs.h | 34 +
include/linux/sunrpc/xdrgen/nfs2.h | 298 ++++
include/trace/misc/nfs.h | 13 +-
include/uapi/linux/nfsd_netlink.h | 20 +
net/sunrpc/auth_gss/svcauth_gss.c | 29 +-
net/sunrpc/rpcb_clnt.c | 34 +-
net/sunrpc/svc.c | 72 +-
net/sunrpc/svc_xprt.c | 83 +-
net/sunrpc/svcauth_unix.c | 9 +
net/sunrpc/svcsock.c | 508 +++---
net/sunrpc/xdr.c | 3 +
net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 18 +-
net/sunrpc/xprtrdma/svc_rdma_transport.c | 3 +-
tools/net/sunrpc/xdrgen/README | 154 +-
tools/net/sunrpc/xdrgen/generators/pointer.py | 68 +-
tools/net/sunrpc/xdrgen/generators/struct.py | 203 ++-
tools/net/sunrpc/xdrgen/generators/union.py | 69 +-
tools/net/sunrpc/xdrgen/grammars/xdr.lark | 2 +
tools/net/sunrpc/xdrgen/subcmds/source.py | 19 +-
.../templates/C/pointer/decoder/pages_opaque.j2 | 6 +
.../templates/C/pointer/definition/pages_opaque.j2 | 5 +
.../templates/C/pointer/encoder/pages_opaque.j2 | 10 +
.../C/struct/declaration/aggregate_hooks.j2 | 14 +
.../templates/C/struct/decoder/aggregate_array.j2 | 33 +
.../C/struct/decoder/aggregate_optional.j2 | 10 +
.../templates/C/struct/decoder/pages_opaque.j2 | 6 +
.../templates/C/struct/definition/pages_opaque.j2 | 5 +
.../templates/C/struct/encoder/aggregate_array.j2 | 37 +
.../C/struct/encoder/aggregate_optional.j2 | 29 +
.../templates/C/struct/encoder/pages_opaque.j2 | 10 +
.../templates/C/union/encoder/pages_opaque.j2 | 10 +
tools/net/sunrpc/xdrgen/xdr_ast.py | 506 ++++++
tools/testing/selftests/Makefile | 1 +
tools/testing/selftests/nfsd/.gitignore | 1 +
tools/testing/selftests/nfsd/Makefile | 6 +
tools/testing/selftests/nfsd/config | 14 +
.../testing/selftests/nfsd/nfsd_netlink_listener.c | 1721 ++++++++++++++++++++
tools/testing/selftests/nfsd/settings | 1 +
112 files changed, 9312 insertions(+), 2813 deletions(-)
create mode 100644 Documentation/sunrpc/xdr/nfs2.x
create mode 100644 fs/nfsd/nfs2xdr_gen.c
create mode 100644 fs/nfsd/nfs2xdr_gen.h
create mode 100644 fs/nfsd/nfs4ctl.h
create mode 100644 fs/nfsd/nfserr.h
create mode 100644 include/linux/nfs_fh.h
create mode 100644 include/linux/nfsd_ssc.h
create mode 100644 include/linux/sunrpc/xdrgen/nfs2.h
create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/pages_opaque.j2
create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/definition/pages_opaque.j2
create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/encoder/pages_opaque.j2
create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/declaration/aggregate_hooks.j2
create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/decoder/aggregate_array.j2
create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/decoder/aggregate_optional.j2
create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/decoder/pages_opaque.j2
create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/definition/pages_opaque.j2
create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/encoder/aggregate_array.j2
create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/encoder/aggregate_optional.j2
create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/encoder/pages_opaque.j2
create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/encoder/pages_opaque.j2
create mode 100644 tools/testing/selftests/nfsd/.gitignore
create mode 100644 tools/testing/selftests/nfsd/Makefile
create mode 100644 tools/testing/selftests/nfsd/config
create mode 100644 tools/testing/selftests/nfsd/nfsd_netlink_listener.c
create mode 100644 tools/testing/selftests/nfsd/settings
reply other threads:[~2026-10-22 19:15 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20261022191536.3094786-1-cel@kernel.org \
--to=cel@kernel.org \
--cc=jlayton@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
/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
all inboxes | Powered by JetHome®