* [GIT PULL] NFSD updates for v7.3
@ 2026-08-19 13:26 Chuck Lever
0 siblings, 0 replies; only message in thread
From: Chuck Lever @ 2026-08-19 13:26 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-nfs, Jeff Layton
The following changes since commit 075b74841bd0065a3bda3440873c747938e69b68:
Linux 7.2-rc6 (2026-08-02 16:24:24 -0700)
are available in the Git repository at:
https://git.kernel.org/pub/scm/linux/kernel/git/cel/linux.git tags/nfsd-7.3
for you to fetch changes up to 46db3c8a1be96a354758b44b1d4fbb4b70d09a20:
nfsd: export NFSv4 callback op stats via netlink (2026-08-10 09:54:35 -0400)
----------------------------------------------------------------
NFSD 7.3 Release Notes
Jeff Layton contributed CB_NOTIFY support to NFSD's NFSv4.1
directory delegations. The server used to recall a delegation as
soon as the directory changed. NFSD now watches delegated
directories through fsnotify and reports adds, removes, renames,
and directory attribute changes, carrying the filehandle and
attributes of the affected entry, so clients can keep their
caches. Some of the NOTIFY4 flags come from RFC 8881bis.
Jeff Layton also continued the netlink work that started in v7.2.
A new server-stats-get operation reports what /proc/net/rpc/nfsd
publishes, plus NFSv4 callback counts, and SUNRPC now keeps its
per-procedure call counts per network namespace, so a container
sees its own numbers. nfsstat reads all of this over netlink, with
a procfs fallback for older kernels.
SUNRPC's service thread pool mode selection is gone. Pernode is
the right choice on any host we run today, so the auto, global,
and percpu modes have been removed. A single-node host still gets
one pool. A multi-NUMA host now gets a pool per node.
sunrpc.pool_mode accepts the old names but no longer selects
anything.
The rest is bug fixes, clean-ups, and small optimizations: an
async COPY offload rework from Jeff Layton, more use-after-free
fixes in the NFSv4 state revocation paths, percpu counter
contention removed from the reply cache and IO accounting, and a
long list of hardening fixes from Chris Mason. Sincere thanks to
all contributors, reviewers, testers, and bug reporters who
participated in the v7.3 NFSD development cycle.
----------------------------------------------------------------
Al Viro (1):
nfsd: unify cleanups in nfsd_cross_mnt() exits
Ameer Hamza (1):
SUNRPC: Restore NUMA_NO_NODE for svc thread allocations in global mode
Chris Mason (23):
SUNRPC: svcauth_gss: enforce krb5 token minimum length
SUNRPC: harden gss_unwrap_resp_priv length checks
SUNRPC: xdr_buf_trim: clamp buf->len to avoid underflow
SUNRPC: harden gss_krb5_unwrap_v2 against short tokens
svcrdma: Fix offset arithmetic in read_chunk_range
svcrdma: Fix pcl_for_each_segment for empty chunks
svcrdma: Reject Write/Reply chunks with segcount 0
svcrdma: Fix unmatched rn_unregister on failed accept
SUNRPC: fix gssx_dec_option_array error path bugs
SUNRPC: reject duplicate CREDS_VALUE options
SUNRPC: Guard svcauth_gss_release() dispatch on rq_auth_stat
SUNRPC: Zero rpc_gss_wire_cred at svcauth_gss_decode_credbody() entry
nfsd: convert nfsd_net boolean flags to unsigned long flags word
nfsd: gate nfs3 setacl by argp->mask
nfsd: fix partial-write detection in nfsd_direct_write
nfsd: cap decoded POSIX ACL count to bound sort cost
sunrpc: init gssp_lock before publishing proc entry
nfsd: size fh_verify server sockaddr slot by xpt_locallen
nfsd: release path refs on follow_down() error
nfsd: hold rcu across localio cmpxchg retry
NFS/localio: fix ref leak on nfs_uuid_add_file failure
nfsd: guard nfsd_serv deref in nfsd_file_net_dispose
nfsd: fix cpntf publish race in nfs4_init_cp_state
Chuck Lever (62):
nfsd: Reset write verifier when async COPY writeback fails
nfsd: sample writeback error cursor before async COPY loop
SUNRPC: Reject short RFC 4121 MIC tokens in gss_krb5_verify_mic_v2
svcrdma: Validate Read chunk positions before reconstruction
svcrdma: Reject oversized Read segments at decode time
svcrdma: Validate Read chunk positions at decode time
svcrdma: Reject Read lists that exceed the page budget
svcrdma: Reorder rpcrdma_rn_unregister before rdma_destroy_id
svcrdma: Use svc_xprt_put to free listener on create failure
svcrdma: Reject connection when transport allocation fails
svcrdma: Clear sc_cm_id when ADDR_CHANGE replacement fails
SUNRPC: Reject krb5 v2 wrap tokens with oversized ec field
SUNRPC: close backchannel before destroying callback service
NFSD: check truncate permission under inode lock
nfsd: gate nfs2 setacl by argp->mask
SUNRPC: Check svc pool percpu counter allocation
rpcrdma: arm rn_done before publishing the notification
SUNRPC: Add svc_serv_maxthreads() to report the thread ceiling
NFSD: Count slot 0 in nfsd_total_target_slots
NFSD: Clean up documenting comment for reduce_session_slots()
NFSD: Document and rename the NFSv4.1 session slot shrinker callbacks
NFSD: Bound on-demand DRC slot growth by the thread ceiling
NFSD: Prevent post-shutdown use-after-free in unlock_filesystem
NFSD: Annotate caller preconditions for the state-table walkers
NFSD: Guard admin state-revocation walks with NFSD_NET_UP
NFSD: Replace isdotent() macro
svcrdma: Reject inline replies that overflow the pull-up buffer
lockd: Regenerate NLMv4 XDR code
NFSD: Prevent lock owner use-after-free during client teardown
NFSD: Prevent client use-after-free during delegation revoke
NFSD: Prevent client use-after-free during admin state revocation
NFSD: Prevent client use-after-free during export state revocation
NFSD: Prevent client use-after-free during NFSv4.0 revoked-state cleanup
NFSD: Consolidate the revocation-path client unpin
NFSD: Prevent client use-after-free during blocked-lock reaping
NFSD: Prevent client use-after-free during close_lru reaping
NFSD: Release the export reference when reaping open stateids
NFSD: Encode only the status in NFS-ACL v2 GETACL error replies
xdrgen: Emit a blank line ahead of enum declarations
xdrgen: Share void RPC procedure handlers across programs
xdrgen: Do not declare union XDR functions in the definitions header
xdrgen: Add XDR width macros for short integer types
xdrgen: Fix opaque and string encoders for unbounded members
xdrgen: Align the error caret under tab-indented source
xdrgen: Record the source position of each declared identifier
xdrgen: Reject specifications that define a name twice
xdrgen: Enforce RFC 5531 name and number scoping for RPC programs
xdrgen: Reject out-of-range program, version, and procedure numbers
NFSD: Make "stats.h" self-contained
NFSD: Explicitly include "stats.h"
NFSD: include "netns.h"
NFSD: Remove '#include "nfsd.h"' from fs/nfsd/cache.h
NFSD: Move the export.h include from nfsd.h to auth.c
NFSD: Move struct readdir_cd
NFSD: Relocate nfsd_user_namespace()
NFSD: Relocate nfsd4_set_netaddr()
NFSD: Relocate NFSv4 "supported attributes" to new header
NFSD: Fix off-by-one in DRC bucket pruning limit
NFSD: Eliminate percpu counter contention in DRC memory accounting
NFSD: Eliminate percpu counter contention in reply cache statistics
NFSD: Eliminate percpu counter contention in IO byte accounting
NFSD: Document reply_cache_stats ABI
David Laight (2):
net/sunrpc/svcauth_unix: Use strscpy() to copy strings into arrays
lockd: Use "%*phN" to dprintk() a cookie
Jeff Layton (79):
nfsd: don't free session slots that are still in use
nfsd: defer setting NFSD4_CALLBACK_RUNNING in deleg_reaper
nfsd: clear CALLBACK_RUNNING on failed delegation recall queue
SUNRPC: always drain cache_cleaner before destroying a cache_detail
nfsd: block non-SAVEFH ops after FOREIGN PUTFH to prevent NULL deref
nfsd: fix XDR padding calculation in ff_encode_getdeviceinfo
nfsd: fix XDR length calculation in nfsd4_ff_encode_layoutget
nfsd: fix BUG_ON in nfsd4_alloc_layout_stateid on racing delegation revoke
nfsd: RCU-protect cl_cb_session to fix use-after-free on session teardown
nfsd: dedup nfs4_client_to_reclaim inserts
nfsd: validate symlink target length in NFSv4 CREATE
nfsd: fix nfsd_file leak on inter-server COPY setup failure
nfsd: fix dentry ref leak on V4ROOT export filehandle lookup
nfsd: fix layout fence worker double-reference race
nfsd: release OPEN-decoded posix ACLs via op_release
nfsd: defer vfree of compound ops to fix rpc_status UAF
nfsd: widen nfsd_genl_rqstp address fields to sockaddr_storage
nfsd: fix refcount leak in nfsd_file_lru_add on insertion failure
nfsd: fix fcache_disposal UAF by inlining dispose state into nfsd_net
nfsd: close shrinker/GC/fsnotify vs per-net shutdown race in filecache
nfsd: clear opcnt on compound arg release to prevent OOB read
nfsd: add missing read barrier to rpc_status_get dumpit seqcount retry
nfsd: fix netlink dumpit error handling for rpc_status_get
sunrpc: defer rq_argp and rq_resp free until after RCU grace period
nfsd: check nfsd4_acl_to_attr() return value in nfsd4_create()
nfsd: add filehandle match check to nfsd4_delegreturn()
nfsd: validate nseconds in TIME_DELEG decode paths
nfsd: fix version mismatch loops in nfsd_acl_init_request()
nfsd: fix FL_SLEEP being set unconditionally for all LOCK types
nfsd: add fh_want_write() for early-verified SETATTR in nfsd_proc_setattr()
nfsd: fix clock domain mismatch in clients_still_reclaiming()
nfsd: use test_and_clear_bit for somebody_reclaimed to prevent lost update
nfsd: reject reclaim LOCK after RECLAIM_COMPLETE
lockd, nfsd: RCU-protect nlmsvc_ops dispatch
nfsd: move nfsd_debugfs_init() after nfsd4_init_slabs() in init_nfsd()
nfsd: initialize DRC hash table before registering shrinker
nfsd: restore rq_status_counter to even on all nfsd_dispatch() exit paths
nfsd: drop the stateid, not the stateowner, on seqid_op replay retry
nfsd: validate sockaddr length per family in listener_set
nfsd: check fl_lmops in nfsd_breaker_owns_lease()
nfsd: add protocol support for CB_NOTIFY
nfs_common: add new NOTIFY4_* flags proposed in RFC8881bis
nfsd: allow nfsd to get a dir lease with an ignore mask
nfsd: update the fsnotify mark when setting or removing a dir delegation
nfsd: make nfsd4_callback_ops->prepare operation bool return
nfsd: add callback encoding and decoding linkages for CB_NOTIFY
nfsd: use RCU to protect fi_deleg_file
nfsd: add data structures for handling CB_NOTIFY
nfsd: add notification handlers for dir events
nfsd: apply the notify mask to the delegation when requested
nfsd: add helper to marshal a fattr4 from completed args
nfsd: allow nfsd4_encode_fattr4_change() to work with no export
nfsd: send basic file attributes in CB_NOTIFY
nfsd: allow encoding a filehandle into fattr4 without a svc_fh
nfsd: add the filehandle to returned attributes in CB_NOTIFY
nfsd: fix reply size estimate for GET_DIR_DELEGATION
nfsd: properly track requested child attributes
nfsd: track requested dir attributes
nfsd: add support to CB_NOTIFY for dir attribute changes
sunrpc: route to a populated pool in svc_pool_for_cpu()
sunrpc: hardcode pool_mode to pernode, remove other modes
sunrpc: guarantee a thread per pool when auto-distributing
sunrpc: tear down pool counters before dropping the pool map reference
sunrpc: derive the pool count instead of caching it in sv_nrpools
nfsd: fix UAF in async copy cancel and shutdown
nfsd: fix stale s2s_cp_stateids IDR entry for async COPY
nfsd: initialize copy-notify stateid before publishing it
nfsd: check client ownership when cancelling a copy-notify stateid
nfsd: revoke copy-notify stateids before dropping their reference
nfsd: return NFS4ERR_NOTSUPP for unsupported netloc4 types
nfsd: split nfsd4_copy into transient and durable async copy objects
nfsd: make the copy offload stateid a first-class nfs4_stid
nfsd: drop dead COPY-vs-COPYNOTIFY type handling from s2s stateid IDR
sunrpc: add per-netns per-procedure call counts to svc_stat
sunrpc: use per-net counts in svc_seq_show()
nfsd: implement server-stats-get netlink handler
sunrpc: remove unused svc_version vs_count field
nfsd: count NFSv4 callback operations per netns
nfsd: export NFSv4 callback op stats via netlink
Michael Bommarito (2):
lockd: pin next file across nlm_inspect_file lock-drop
NFSD: restart ssc_expire_umount walk after dropping nfsd_ssc_lock
Mike Snitzer (1):
NFSD: remove flawed WARN_ON_ONCE from nfsd_mode_check
NeilBrown (2):
nfsd: fix possible fh_compose of wrong dentry in nfsd4_create_file()
nfsd: ensure nfsd_file_do_acquire() does not use a non-opened file
Nikol Kuklev (1):
nfsd: fix null dereference in nfsd4_setattr for deleg timestamp attrs
Olga Kornievskaia (1):
lockd: fix NLMv4 GRANTED_MSG handling
Oscar Ou (2):
lockd: fix swapped arguments in nlmsvc_match_ip()
lockd: preserve multiple NLM_SHARE grants from the same owner
Robbie Ko (3):
nfsd: reject out-of-range useconds in NFSv2 SETATTR/CREATE
nfsd: reject out-of-range nseconds in NFSv3 SETATTR and create ops
nfsd: use NSEC_PER_SEC in nfsd4_decode_nfstime4()
Scott Mayhew (1):
NFSD: fix up error returned by write_threads()
Zhenghang Xiao (1):
nfsd: set SC_STATUS_FREED in nfsd4_drop_revoked_stid for delegations
.../ABI/testing/procfs-nfsd-reply_cache_stats | 38 +
Documentation/admin-guide/kernel-parameters.txt | 20 +-
Documentation/netlink/specs/nfsd.yaml | 111 ++
Documentation/sunrpc/xdr/nfs4_1.x | 258 +++-
fs/lockd/lockd.h | 2 +-
fs/lockd/nlm3xdr_gen.c | 30 +-
fs/lockd/nlm3xdr_gen.h | 4 +-
fs/lockd/nlm4xdr_gen.c | 75 +-
fs/lockd/nlm4xdr_gen.h | 4 +-
fs/lockd/share.h | 8 +-
fs/lockd/svc.c | 4 +-
fs/lockd/svc4proc.c | 55 +-
fs/lockd/svclock.c | 42 +-
fs/lockd/svcproc.c | 55 +-
fs/lockd/svcshare.c | 36 +-
fs/lockd/svcsubs.c | 107 +-
fs/nfs/callback.c | 4 +-
fs/nfs/callback_xdr.c | 6 -
fs/nfs_common/nfslocalio.c | 16 +-
fs/nfsd/attr4.h | 162 +++
fs/nfsd/auth.c | 19 +
fs/nfsd/auth.h | 6 +
fs/nfsd/cache.h | 3 +-
fs/nfsd/filecache.c | 265 ++--
fs/nfsd/filecache.h | 3 +
fs/nfsd/flexfilelayoutxdr.c | 20 +-
fs/nfsd/localio.c | 11 +-
fs/nfsd/lockd.c | 6 +-
fs/nfsd/netlink.c | 5 +
fs/nfsd/netlink.h | 2 +
fs/nfsd/netns.h | 47 +-
fs/nfsd/nfs2acl.c | 55 +-
fs/nfsd/nfs3acl.c | 20 +-
fs/nfsd/nfs3proc.c | 45 +-
fs/nfsd/nfs3xdr.c | 2 +-
fs/nfsd/nfs4callback.c | 229 +++-
fs/nfsd/nfs4idmap.c | 1 +
fs/nfsd/nfs4layouts.c | 45 +-
fs/nfsd/nfs4proc.c | 412 +++++--
fs/nfsd/nfs4recover.c | 48 +-
fs/nfsd/nfs4state.c | 1281 ++++++++++++++++----
fs/nfsd/nfs4xdr.c | 411 ++++++-
fs/nfsd/nfs4xdr_gen.c | 600 ++++++++-
fs/nfsd/nfs4xdr_gen.h | 20 +-
fs/nfsd/nfscache.c | 8 +-
fs/nfsd/nfsctl.c | 435 ++++++-
fs/nfsd/nfsd.h | 214 +---
fs/nfsd/nfsfh.c | 44 +-
fs/nfsd/nfsfh.h | 3 +
fs/nfsd/nfsproc.c | 12 +-
fs/nfsd/nfssvc.c | 71 +-
fs/nfsd/nfsxdr.c | 34 +-
fs/nfsd/state.h | 97 +-
fs/nfsd/stats.c | 4 +-
fs/nfsd/stats.h | 86 +-
fs/nfsd/trace.h | 43 +-
fs/nfsd/vfs.c | 63 +-
fs/nfsd/vfs.h | 5 +-
fs/nfsd/xdr.h | 1 +
fs/nfsd/xdr3.h | 1 +
fs/nfsd/xdr4.h | 37 +-
fs/nfsd/xdr4cb.h | 12 +
include/linux/lockd/bind.h | 12 +-
include/linux/nfs4.h | 127 --
include/linux/sunrpc/bc_xprt.h | 5 +
include/linux/sunrpc/stats.h | 6 +
include/linux/sunrpc/svc.h | 4 +-
include/linux/sunrpc/svc_rdma_pcl.h | 4 +-
include/linux/sunrpc/xdrgen/_builtins.h | 32 +
include/linux/sunrpc/xdrgen/_defs.h | 2 +
include/linux/sunrpc/xdrgen/nfs4_1.h | 290 ++++-
include/linux/sunrpc/xdrgen/nlm3.h | 2 +-
include/linux/sunrpc/xdrgen/nlm4.h | 2 +-
include/uapi/linux/nfs4.h | 2 -
include/uapi/linux/nfsd_netlink.h | 36 +
net/sunrpc/auth_gss/auth_gss.c | 6 +-
net/sunrpc/auth_gss/gss_krb5_unseal.c | 3 +
net/sunrpc/auth_gss/gss_krb5_wrap.c | 13 +-
net/sunrpc/auth_gss/gss_rpc_upcall.c | 6 -
net/sunrpc/auth_gss/gss_rpc_upcall.h | 1 -
net/sunrpc/auth_gss/gss_rpc_xdr.c | 15 +-
net/sunrpc/auth_gss/svcauth_gss.c | 8 +-
net/sunrpc/backchannel_rqst.c | 38 +-
net/sunrpc/cache.c | 7 +-
net/sunrpc/stats.c | 2 +-
net/sunrpc/sunrpc_syms.c | 1 +
net/sunrpc/svc.c | 495 ++++----
net/sunrpc/svc_xprt.c | 6 +-
net/sunrpc/svcauth_unix.c | 4 +-
net/sunrpc/xdr.c | 2 +-
net/sunrpc/xprtrdma/ib_client.c | 42 +-
net/sunrpc/xprtrdma/svc_rdma_pcl.c | 63 +-
net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 24 +-
net/sunrpc/xprtrdma/svc_rdma_rw.c | 52 +-
net/sunrpc/xprtrdma/svc_rdma_sendto.c | 47 +-
net/sunrpc/xprtrdma/svc_rdma_transport.c | 69 +-
tools/net/sunrpc/xdrgen/generators/program.py | 8 +
tools/net/sunrpc/xdrgen/subcmds/declarations.py | 10 +-
tools/net/sunrpc/xdrgen/subcmds/definitions.py | 7 +-
tools/net/sunrpc/xdrgen/subcmds/lint.py | 7 +-
tools/net/sunrpc/xdrgen/subcmds/source.py | 7 +-
.../xdrgen/templates/C/enum/declaration/enum.j2 | 1 +
.../xdrgen/templates/C/pointer/encoder/string.j2 | 2 +
.../C/pointer/encoder/variable_length_opaque.j2 | 2 +
.../xdrgen/templates/C/program/decoder/argument.j2 | 4 -
.../xdrgen/templates/C/program/encoder/result.j2 | 4 -
.../xdrgen/templates/C/struct/encoder/string.j2 | 2 +
.../C/struct/encoder/variable_length_opaque.j2 | 2 +
.../xdrgen/templates/C/union/definition/close.j2 | 6 -
.../xdrgen/tests/bad-procedure-number-negative.x | 20 +
.../xdrgen/tests/bad-procedure-number-too-large.x | 20 +
.../xdrgen/tests/bad-program-number-negative.x | 19 +
.../xdrgen/tests/bad-program-number-too-large.x | 19 +
.../xdrgen/tests/bad-version-number-negative.x | 19 +
.../xdrgen/tests/bad-version-number-too-large.x | 19 +
tools/net/sunrpc/xdrgen/xdr_ast.py | 290 ++++-
tools/net/sunrpc/xdrgen/xdr_parse.py | 46 +-
117 files changed, 5969 insertions(+), 1736 deletions(-)
create mode 100644 Documentation/ABI/testing/procfs-nfsd-reply_cache_stats
create mode 100644 fs/nfsd/attr4.h
create mode 100644 tools/net/sunrpc/xdrgen/tests/bad-procedure-number-negative.x
create mode 100644 tools/net/sunrpc/xdrgen/tests/bad-procedure-number-too-large.x
create mode 100644 tools/net/sunrpc/xdrgen/tests/bad-program-number-negative.x
create mode 100644 tools/net/sunrpc/xdrgen/tests/bad-program-number-too-large.x
create mode 100644 tools/net/sunrpc/xdrgen/tests/bad-version-number-negative.x
create mode 100644 tools/net/sunrpc/xdrgen/tests/bad-version-number-too-large.x
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-08-19 13:26 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-19 13:26 [GIT PULL] NFSD updates for v7.3 Chuck Lever
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox