Hi Linus - The following changes since commit 2d5404caa8c7bb5c4e0435f94b28834ae5456623: Linux 6.12-rc7 (2024-11-10 14:19:35 -0800) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/cel/linux.git tags/nfsd-6.13 for you to fetch changes up to 583772eec7b0096516a8ee8b1cc31401894f1e3a: nfsd: allow for up to 32 callback session slots (2024-11-18 20:23:13 -0500) ---------------------------------------------------------------- NFSD 6.13 Release Notes Jeff Layton contributed a scalability improvement to NFSD's NFSv4 backchannel session implementation. This improvement is intended to increase the rate at which NFSD can safely recall NFSv4 delegations from clients, to avoid the need to revoke them. Revoking requires a slow state recovery process. A wide variety of bug fixes and other incremental improvements make up the bulk of commits in this series. As always I am grateful to the NFSD contributors, reviewers, testers, and bug reporters who participated during this cycle. ---------------------------------------------------------------- Al Viro (1): nfsd: get rid of include ../internal.h Chuck Lever (49): NFSD: Prevent a potential integer overflow svcrdma: Address an integer overflow NFSD: Remove unused function parameter xdrgen: Exit status should be zero on success xdrgen: Clean up type_specifier xdrgen: Rename "variable-length strings" xdrgen: Rename enum's declaration Jinja2 template xdrgen: Rename "enum yada" types as just "yada" xdrgen: Implement big-endian enums xdrgen: Refactor transformer arms xdrgen: Track constant values xdrgen: Keep track of on-the-wire data type widths xdrgen: XDR widths for enum types xdrgen: XDR width for fixed-length opaque xdrgen: XDR width for variable-length opaque xdrgen: XDR width for a string xdrgen: XDR width for fixed-length array xdrgen: XDR width for variable-length array xdrgen: XDR width for optional_data type xdrgen: XDR width for typedef xdrgen: XDR width for struct types xdrgen: XDR width for pointer types xdrgen: XDR width for union types xdrgen: Add generator code for XDR width macros xdrgen: emit maxsize macros xdrgen: Add a utility for extracting XDR from RFCs NFSD: Replace use of NFSD_MAY_LOCK in nfsd4_lock() NFSD: Remove dead code in nfsd4_create_session() NFSD: Remove a never-true comparison NFSD: Prevent NULL dereference in nfsd4_process_cb_update() NFSD: Remove unused results in nfsd4_encode_pathname4() NFSD: Remove unused values from nfsd4_encode_components_esc() NFSD: Cap the number of bytes copied by nfs4_reset_recoverydir() lockd: Remove unused typedef lockd: Remove unnecessary memset() lockd: Remove some snippets of unfinished code lockd: Remove unused parameter to nlmsvc_testlock() lockd: Remove unneeded initialization of file_lock::c.flc_flags xdrgen: Remove tracepoint call site xdrgen: Remove check for "nfs_ok" in C templates xdrgen: Update the files included in client-side source code xdrgen: Remove program_stat_to_errno() call sites NFSD: Add a tracepoint to record canceled async COPY operations NFSD: Fix nfsd4_shutdown_copy() NFSD: Free async copy information in nfsd4_cb_offload_release() NFSD: Handle an NFS4ERR_DELAY response to CB_OFFLOAD NFSD: Block DESTROY_CLIENTID only when there are ongoing async COPY operations NFSD: Add a laundromat reaper for async copy state NFSD: Add nfsd4_copy time-to-live Jeff Layton (8): nfsd: drop inode parameter from nfsd4_change_attribute() nfsd: drop the ncf_cb_bmap field nfsd: drop the nfsd4_fattr_args "size" field nfsd: have nfsd4_deleg_getattr_conflict pass back write deleg pointer nfsd: new tracepoint for after op_func in compound processing nfsd: remove nfsd4_session->se_bchannel nfsd: make nfsd4_session->se_flags a bool nfsd: allow for up to 32 callback session slots Julia Lawall (1): nfsd: replace call_rcu by kfree_rcu for simple kmem_cache_free callback Mike Snitzer (1): nfs_common: must not hold RCU while calling nfsd_file_put_local NeilBrown (3): nfsd: refine and rename NFSD_MAY_LOCK nfsd: Don't fail OP_SETCLIENTID when there are too many clients. nfsd: make use of warning provided by refcount_t Pali Rohár (3): lockd: Fix comment about NLMv3 backwards compatibility nfsd: Fill NFSv4.1 server implementation fields in OP_EXCHANGE_ID response nfsd: Fix NFSD_MAY_BYPASS_GSS and NFSD_MAY_BYPASS_GSS_ON_ROOT Thorsten Blum (1): NFSD: Remove unnecessary posix_acl_entry pointer initialization Yang Erkun (4): nfsd: make sure exp active before svc_export_show SUNRPC: make sure cache entry active before cache_show nfsd: release svc_expkey/svc_export with rcu_work nfsd: fix nfs4_openowner leak when concurrent nfsd4_open occur Ye Bin (1): svcrdma: fix miss destroy percpu_counter in svc_rdma_proc_init() MAINTAINERS | 1 + fs/lockd/clntxdr.c | 5 ++- fs/lockd/svc4proc.c | 20 +++------ fs/lockd/svclock.c | 2 +- fs/lockd/svcproc.c | 15 +------ fs/lockd/xdr4.c | 2 - fs/nfs_common/nfslocalio.c | 8 ++-- fs/nfsd/export.c | 57 ++++++++++++++++++++---- fs/nfsd/export.h | 7 +-- fs/nfsd/filecache.c | 19 ++++---- fs/nfsd/filecache.h | 2 +- fs/nfsd/lockd.c | 13 +++++- fs/nfsd/nfs4acl.c | 2 - fs/nfsd/nfs4callback.c | 139 +++++++++++++++++++++++++++++++++++++++++++---------------- fs/nfsd/nfs4proc.c | 103 +++++++++++++++++++++++++++++++++++++++----- fs/nfsd/nfs4recover.c | 3 +- fs/nfsd/nfs4state.c | 127 +++++++++++++++++++++++++++++++++++------------------- fs/nfsd/nfs4xdr.c | 73 ++++++++++++++++++------------- fs/nfsd/nfsfh.c | 41 ++++++++++-------- fs/nfsd/nfsfh.h | 3 +- fs/nfsd/state.h | 40 +++++++++++------ fs/nfsd/trace.h | 29 +++++++++++-- fs/nfsd/vfs.c | 26 +++-------- fs/nfsd/vfs.h | 6 +-- fs/nfsd/xdr4.h | 8 ++++ include/linux/lockd/lockd.h | 6 +-- include/linux/lockd/xdr.h | 2 - include/linux/nfslocalio.h | 18 ++++++-- include/linux/sunrpc/xdr.h | 21 +++++++++ include/linux/sunrpc/xdrgen/_defs.h | 9 ++++ net/sunrpc/cache.c | 4 +- net/sunrpc/xprtrdma/svc_rdma.c | 19 +++++--- net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 8 +++- tools/net/sunrpc/extract.sh | 11 +++++ tools/net/sunrpc/xdrgen/README | 17 ++++++++ tools/net/sunrpc/xdrgen/generators/__init__.py | 4 ++ tools/net/sunrpc/xdrgen/generators/enum.py | 30 ++++++++++--- tools/net/sunrpc/xdrgen/generators/pointer.py | 26 ++++++++--- tools/net/sunrpc/xdrgen/generators/struct.py | 26 ++++++++--- tools/net/sunrpc/xdrgen/generators/typedef.py | 28 +++++++++--- tools/net/sunrpc/xdrgen/generators/union.py | 52 +++++++++++++++++----- tools/net/sunrpc/xdrgen/grammars/xdr.lark | 6 ++- tools/net/sunrpc/xdrgen/subcmds/definitions.py | 24 +++++++++-- tools/net/sunrpc/xdrgen/subcmds/source.py | 3 +- tools/net/sunrpc/xdrgen/templates/C/enum/declaration/close.j2 | 4 -- tools/net/sunrpc/xdrgen/templates/C/enum/declaration/enum.j2 | 4 ++ tools/net/sunrpc/xdrgen/templates/C/enum/decoder/enum.j2 | 2 +- tools/net/sunrpc/xdrgen/templates/C/enum/decoder/enum_be.j2 | 14 ++++++ tools/net/sunrpc/xdrgen/templates/C/enum/definition/close.j2 | 1 + tools/net/sunrpc/xdrgen/templates/C/enum/definition/close_be.j2 | 3 ++ tools/net/sunrpc/xdrgen/templates/C/enum/encoder/enum.j2 | 2 +- tools/net/sunrpc/xdrgen/templates/C/enum/encoder/enum_be.j2 | 14 ++++++ tools/net/sunrpc/xdrgen/templates/C/enum/maxsize/enum.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/{variable_length_string.j2 => string.j2} | 0 tools/net/sunrpc/xdrgen/templates/C/pointer/definition/{variable_length_string.j2 => string.j2} | 0 tools/net/sunrpc/xdrgen/templates/C/pointer/encoder/{variable_length_string.j2 => string.j2} | 0 tools/net/sunrpc/xdrgen/templates/C/pointer/maxsize/pointer.j2 | 3 ++ tools/net/sunrpc/xdrgen/templates/C/program/decoder/result.j2 | 4 -- tools/net/sunrpc/xdrgen/templates/C/source_top/client.j2 | 9 +++- tools/net/sunrpc/xdrgen/templates/C/struct/decoder/{variable_length_string.j2 => string.j2} | 0 tools/net/sunrpc/xdrgen/templates/C/struct/definition/{variable_length_string.j2 => string.j2} | 0 tools/net/sunrpc/xdrgen/templates/C/struct/encoder/{variable_length_string.j2 => string.j2} | 0 tools/net/sunrpc/xdrgen/templates/C/struct/maxsize/struct.j2 | 3 ++ tools/net/sunrpc/xdrgen/templates/C/typedef/declaration/{variable_length_string.j2 => string.j2} | 0 tools/net/sunrpc/xdrgen/templates/C/typedef/decoder/{variable_length_string.j2 => string.j2} | 0 tools/net/sunrpc/xdrgen/templates/C/typedef/definition/{variable_length_string.j2 => string.j2} | 0 tools/net/sunrpc/xdrgen/templates/C/typedef/encoder/{variable_length_string.j2 => string.j2} | 0 tools/net/sunrpc/xdrgen/templates/C/typedef/maxsize/basic.j2 | 3 ++ tools/net/sunrpc/xdrgen/templates/C/typedef/maxsize/fixed_length_opaque.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/typedef/maxsize/string.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/typedef/maxsize/variable_length_array.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/typedef/maxsize/variable_length_opaque.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/union/decoder/case_spec_be.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/union/decoder/{variable_length_string.j2 => string.j2} | 0 tools/net/sunrpc/xdrgen/templates/C/union/encoder/case_spec_be.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/union/maxsize/union.j2 | 3 ++ tools/net/sunrpc/xdrgen/xdr_ast.py | 311 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------- tools/net/sunrpc/xdrgen/xdrgen | 4 +- 78 files changed, 1115 insertions(+), 348 deletions(-) create mode 100755 tools/net/sunrpc/extract.sh delete mode 100644 tools/net/sunrpc/xdrgen/templates/C/enum/declaration/close.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/enum/declaration/enum.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/enum/decoder/enum_be.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/enum/definition/close_be.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/enum/encoder/enum_be.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/enum/maxsize/enum.j2 rename tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/{variable_length_string.j2 => string.j2} (100%) rename tools/net/sunrpc/xdrgen/templates/C/pointer/definition/{variable_length_string.j2 => string.j2} (100%) rename tools/net/sunrpc/xdrgen/templates/C/pointer/encoder/{variable_length_string.j2 => string.j2} (100%) create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/maxsize/pointer.j2 rename tools/net/sunrpc/xdrgen/templates/C/struct/decoder/{variable_length_string.j2 => string.j2} (100%) rename tools/net/sunrpc/xdrgen/templates/C/struct/definition/{variable_length_string.j2 => string.j2} (100%) rename tools/net/sunrpc/xdrgen/templates/C/struct/encoder/{variable_length_string.j2 => string.j2} (100%) create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/maxsize/struct.j2 rename tools/net/sunrpc/xdrgen/templates/C/typedef/declaration/{variable_length_string.j2 => string.j2} (100%) rename tools/net/sunrpc/xdrgen/templates/C/typedef/decoder/{variable_length_string.j2 => string.j2} (100%) rename tools/net/sunrpc/xdrgen/templates/C/typedef/definition/{variable_length_string.j2 => string.j2} (100%) rename tools/net/sunrpc/xdrgen/templates/C/typedef/encoder/{variable_length_string.j2 => string.j2} (100%) create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/maxsize/basic.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/maxsize/fixed_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/maxsize/string.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/maxsize/variable_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/maxsize/variable_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/decoder/case_spec_be.j2 rename tools/net/sunrpc/xdrgen/templates/C/union/decoder/{variable_length_string.j2 => string.j2} (100%) create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/encoder/case_spec_be.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/maxsize/union.j2 -- Chuck Lever