Hi Linus- A quick note about the rather fresh commit dates in this PR: We had some additional changes queued up that needed to be dropped because their defect rate was not going down as fast as I would like prior to -rc1, especially considering maintainer travel plans. Those changes will be rescheduled for v6.13. The commits included here have been in linux-next for weeks and pass our NFSD CI tests. --- cut here --- The following changes since commit 431c1646e1f86b949fa3685efc50b660a364c2b6: Linux 6.11-rc6 (2024-09-01 19:46:02 +1200) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/cel/linux.git tags/nfsd-6.12 for you to fetch changes up to 509abfc7a0ba66afa648e8216306acdc55ec54ed: xdrgen: Prevent reordering of encoder and decoder functions (2024-09-20 19:31:41 -0400) ---------------------------------------------------------------- NFSD 6.12 Release Notes Notable features of this release include: - Pre-requisites for automatically determining the RPC server thread count - Clean-up and preparation for supporting LOCALIO, which will be merged via the NFS client tree - Enhancements and fixes to NFSv4.2 COPY offload - A new Python-based tool for generating kernel SunRPC XDR encoding and decoding functions, added as an aid for prototyping features in protocols based on the Linux kernel's SunRPC implementation. As always I am grateful to the NFSD contributors, reviewers, testers, and bug reporters who participated during this cycle. ---------------------------------------------------------------- Chen Hanxiao (1): NFS: trace: show TIMEDOUT instead of 0x6e Chuck Lever (13): svcrdma: Handle device removal outside of the CM event handler NFSD: Fix NFSv4's PUTPUBFH operation .mailmap: Add an entry for my work email address NFSD: Async COPY result needs to return a write verifier NFSD: Limit the number of concurrent async COPY operations NFSD: Display copy stateids with conventional print formatting NFSD: Record the callback stateid in copy tracepoints NFSD: Clean up extra whitespace in trace_nfsd_copy_done NFSD: Wrap async copy operations with trace points tools: Add xdrgen xdrgen: Fix return code checking in built-in XDR decoders xdrgen: typedefs should use the built-in string and opaque functions xdrgen: Prevent reordering of encoder and decoder functions Guoqing Jiang (1): nfsd: call cache_put if xdr_reserve_space returns NULL Hongbo Li (1): nfsd: use LIST_HEAD() to simplify code Jeff Layton (7): nfsd: remove unneeded EEXIST error check in nfsd_do_file_acquire nfsd: fix refcount leak when file is unhashed after being found nfsd: count nfsd_file allocations nfsd: add more info to WARN_ON_ONCE on failed callbacks nfsd: track the main opcode for callbacks nfsd: add more nfsd_cb tracepoints nfsd: fix initial getattr on write delegation Li Lingfeng (5): NFSD: remove redundant assignment operation nfsd: map the EBADMSG to nfserr_io to avoid warning nfsd: remove unused parameter of nfsd_file_mark_find_or_create nfsd: fix some spelling errors in comments nfsd: return -EINVAL when namelen is 0 Mark Grimes (1): nfsd: Add quotes to client info 'callback address' NeilBrown (22): nfsd: don't EXPORT_SYMBOL nfsd4_ssc_init_umount_work() lockd: discard nlmsvc_timeout SUNRPC: make various functions static, or not exported. nfsd: move nfsd_pool_stats_open into nfsctl.c nfsd: don't allocate the versions array. sunrpc: document locking rules for svc_exit_thread() sunrpc: change sp_nrthreads from atomic_t to unsigned int. sunrpc: don't take ->sv_lock when updating ->sv_nrthreads. sunrpc: merge svc_rqst_alloc() into svc_prepare_thread() sunrpc: allow svc threads to fail initialisation cleanly nfsd: Don't pass all of rqst into rqst_exp_find() nfsd: Pass 'cred' instead of 'rqstp' to some functions. nfsd: use nfsd_v4client() in nfsd_breaker_owns_lease() nfsd: further centralize protocol version checks. nfsd: move V4ROOT version check to nfsd_set_fh_dentry() nfsd: Move error code mapping to per-version proc code. nfsd: be more systematic about selecting error codes for internal use. nfsd: move error choice for incorrect object types to version-specific code. nfsd: use clear_and_wake_up_bit() nfsd: avoid races with wake_up_var() nfsd: untangle code in nfsd4_deleg_getattr_conflict() nfsd: fix delegation_blocked() to block correctly for at least 30 seconds Sagi Grimberg (1): nfsd: don't assume copy notify when preprocessing the stateid Scott Mayhew (1): nfsd: enforce upper limit for namelen in __cld_pipe_inprogress_downcall() Thorsten Blum (1): NFSD: Annotate struct pnfs_block_deviceaddr with __counted_by() Yan Zhen (1): sunrpc: xprtrdma: Use ERR_CAST() to return Youzhong Yang (2): nfsd: add list_head nf_gc to struct nfsd_file nfsd: use system_unbound_wq for nfsd_file_gc_worker() .mailmap | 3 + fs/lockd/host.c | 2 +- fs/lockd/svc.c | 9 +- fs/nfs/callback.c | 2 + fs/nfsd/auth.c | 14 +- fs/nfsd/auth.h | 2 +- fs/nfsd/blocklayout.c | 6 +- fs/nfsd/blocklayoutxdr.h | 2 +- fs/nfsd/cache.h | 2 +- fs/nfsd/export.c | 37 ++-- fs/nfsd/export.h | 7 +- fs/nfsd/filecache.c | 36 ++-- fs/nfsd/filecache.h | 1 + fs/nfsd/netns.h | 7 +- fs/nfsd/nfs3proc.c | 44 +++++ fs/nfsd/nfs4callback.c | 8 +- fs/nfsd/nfs4idmap.c | 13 +- fs/nfsd/nfs4layouts.c | 1 + fs/nfsd/nfs4proc.c | 71 ++++---- fs/nfsd/nfs4recover.c | 13 +- fs/nfsd/nfs4state.c | 225 ++++++++++++------------ fs/nfsd/nfs4xdr.c | 29 +++- fs/nfsd/nfsctl.c | 19 +- fs/nfsd/nfsd.h | 44 +++-- fs/nfsd/nfsfh.c | 58 +++---- fs/nfsd/nfsfh.h | 2 + fs/nfsd/nfsproc.c | 49 +++++- fs/nfsd/nfssvc.c | 126 +++----------- fs/nfsd/state.h | 1 + fs/nfsd/trace.h | 124 +++++++++++-- fs/nfsd/vfs.c | 45 +++-- fs/nfsd/vfs.h | 4 +- fs/nfsd/xdr4.h | 1 + include/linux/lockd/lockd.h | 2 +- include/linux/nfs4.h | 17 +- include/linux/sunrpc/svc.h | 44 +++-- include/linux/sunrpc/svc_rdma.h | 2 + include/linux/sunrpc/svcauth.h | 1 - include/linux/sunrpc/svcsock.h | 2 - include/linux/sunrpc/xdrgen/_builtins.h | 243 ++++++++++++++++++++++++++ include/linux/sunrpc/xdrgen/_defs.h | 26 +++ include/trace/events/rpcrdma.h | 23 +++ include/trace/misc/nfs.h | 1 + net/sunrpc/sunrpc.h | 4 + net/sunrpc/svc.c | 130 +++++++------- net/sunrpc/svc_xprt.c | 9 - net/sunrpc/svcauth.c | 1 - net/sunrpc/svcsock.c | 1 - net/sunrpc/xprtrdma/svc_rdma_transport.c | 18 +- tools/net/sunrpc/xdrgen/.gitignore | 2 + tools/net/sunrpc/xdrgen/README | 244 ++++++++++++++++++++++++++ tools/net/sunrpc/xdrgen/__init__.py | 2 + tools/net/sunrpc/xdrgen/generators/__init__.py | 113 ++++++++++++ tools/net/sunrpc/xdrgen/generators/constant.py | 20 +++ tools/net/sunrpc/xdrgen/generators/enum.py | 44 +++++ tools/net/sunrpc/xdrgen/generators/header_bottom.py | 33 ++++ tools/net/sunrpc/xdrgen/generators/header_top.py | 45 +++++ tools/net/sunrpc/xdrgen/generators/pointer.py | 272 +++++++++++++++++++++++++++++ tools/net/sunrpc/xdrgen/generators/program.py | 168 ++++++++++++++++++ tools/net/sunrpc/xdrgen/generators/source_top.py | 32 ++++ tools/net/sunrpc/xdrgen/generators/struct.py | 272 +++++++++++++++++++++++++++++ tools/net/sunrpc/xdrgen/generators/typedef.py | 255 +++++++++++++++++++++++++++ tools/net/sunrpc/xdrgen/generators/union.py | 243 ++++++++++++++++++++++++++ tools/net/sunrpc/xdrgen/grammars/xdr.lark | 119 +++++++++++++ tools/net/sunrpc/xdrgen/subcmds/__init__.py | 2 + tools/net/sunrpc/xdrgen/subcmds/declarations.py | 76 ++++++++ tools/net/sunrpc/xdrgen/subcmds/definitions.py | 78 +++++++++ tools/net/sunrpc/xdrgen/subcmds/lint.py | 33 ++++ tools/net/sunrpc/xdrgen/subcmds/source.py | 118 +++++++++++++ tools/net/sunrpc/xdrgen/templates/C/constants/definition.j2 | 3 + tools/net/sunrpc/xdrgen/templates/C/enum/declaration/close.j2 | 4 + tools/net/sunrpc/xdrgen/templates/C/enum/decoder/enum.j2 | 19 ++ tools/net/sunrpc/xdrgen/templates/C/enum/definition/close.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/enum/definition/enumerator.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/enum/definition/open.j2 | 3 + tools/net/sunrpc/xdrgen/templates/C/enum/encoder/enum.j2 | 14 ++ tools/net/sunrpc/xdrgen/templates/C/header_bottom/declaration/header.j2 | 3 + tools/net/sunrpc/xdrgen/templates/C/header_bottom/definition/header.j2 | 3 + tools/net/sunrpc/xdrgen/templates/C/header_top/declaration/header.j2 | 14 ++ tools/net/sunrpc/xdrgen/templates/C/header_top/definition/header.j2 | 10 ++ tools/net/sunrpc/xdrgen/templates/C/pointer/declaration/close.j2 | 4 + tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/basic.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/close.j2 | 3 + tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/fixed_length_array.j2 | 8 + tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/fixed_length_opaque.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/open.j2 | 22 +++ tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/optional_data.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/variable_length_array.j2 | 13 ++ tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/variable_length_opaque.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/variable_length_string.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/pointer/definition/basic.j2 | 5 + tools/net/sunrpc/xdrgen/templates/C/pointer/definition/close.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/pointer/definition/fixed_length_array.j2 | 5 + tools/net/sunrpc/xdrgen/templates/C/pointer/definition/fixed_length_opaque.j2 | 5 + tools/net/sunrpc/xdrgen/templates/C/pointer/definition/open.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/pointer/definition/optional_data.j2 | 5 + tools/net/sunrpc/xdrgen/templates/C/pointer/definition/variable_length_array.j2 | 8 + tools/net/sunrpc/xdrgen/templates/C/pointer/definition/variable_length_opaque.j2 | 5 + tools/net/sunrpc/xdrgen/templates/C/pointer/definition/variable_length_string.j2 | 5 + tools/net/sunrpc/xdrgen/templates/C/pointer/encoder/basic.j2 | 10 ++ tools/net/sunrpc/xdrgen/templates/C/pointer/encoder/close.j2 | 3 + tools/net/sunrpc/xdrgen/templates/C/pointer/encoder/fixed_length_array.j2 | 12 ++ tools/net/sunrpc/xdrgen/templates/C/pointer/encoder/fixed_length_opaque.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/pointer/encoder/open.j2 | 20 +++ tools/net/sunrpc/xdrgen/templates/C/pointer/encoder/optional_data.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/pointer/encoder/variable_length_array.j2 | 15 ++ tools/net/sunrpc/xdrgen/templates/C/pointer/encoder/variable_length_opaque.j2 | 8 + tools/net/sunrpc/xdrgen/templates/C/pointer/encoder/variable_length_string.j2 | 8 + tools/net/sunrpc/xdrgen/templates/C/program/declaration/argument.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/program/declaration/result.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/program/decoder/argument.j2 | 21 +++ tools/net/sunrpc/xdrgen/templates/C/program/decoder/result.j2 | 22 +++ tools/net/sunrpc/xdrgen/templates/C/program/definition/close.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/program/definition/open.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/program/definition/procedure.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/program/encoder/argument.j2 | 16 ++ tools/net/sunrpc/xdrgen/templates/C/program/encoder/result.j2 | 21 +++ tools/net/sunrpc/xdrgen/templates/C/source_top/client.j2 | 8 + tools/net/sunrpc/xdrgen/templates/C/source_top/server.j2 | 8 + tools/net/sunrpc/xdrgen/templates/C/struct/declaration/close.j2 | 4 + tools/net/sunrpc/xdrgen/templates/C/struct/decoder/basic.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/struct/decoder/close.j2 | 3 + tools/net/sunrpc/xdrgen/templates/C/struct/decoder/fixed_length_array.j2 | 8 + tools/net/sunrpc/xdrgen/templates/C/struct/decoder/fixed_length_opaque.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/struct/decoder/open.j2 | 12 ++ tools/net/sunrpc/xdrgen/templates/C/struct/decoder/optional_data.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/struct/decoder/variable_length_array.j2 | 13 ++ tools/net/sunrpc/xdrgen/templates/C/struct/decoder/variable_length_opaque.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/struct/decoder/variable_length_string.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/struct/definition/basic.j2 | 5 + tools/net/sunrpc/xdrgen/templates/C/struct/definition/close.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/struct/definition/fixed_length_array.j2 | 5 + tools/net/sunrpc/xdrgen/templates/C/struct/definition/fixed_length_opaque.j2 | 5 + tools/net/sunrpc/xdrgen/templates/C/struct/definition/open.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/struct/definition/optional_data.j2 | 5 + tools/net/sunrpc/xdrgen/templates/C/struct/definition/variable_length_array.j2 | 8 + tools/net/sunrpc/xdrgen/templates/C/struct/definition/variable_length_opaque.j2 | 5 + tools/net/sunrpc/xdrgen/templates/C/struct/definition/variable_length_string.j2 | 5 + tools/net/sunrpc/xdrgen/templates/C/struct/encoder/basic.j2 | 10 ++ tools/net/sunrpc/xdrgen/templates/C/struct/encoder/close.j2 | 3 + tools/net/sunrpc/xdrgen/templates/C/struct/encoder/fixed_length_array.j2 | 12 ++ tools/net/sunrpc/xdrgen/templates/C/struct/encoder/fixed_length_opaque.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/struct/encoder/open.j2 | 12 ++ tools/net/sunrpc/xdrgen/templates/C/struct/encoder/optional_data.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/struct/encoder/variable_length_array.j2 | 15 ++ tools/net/sunrpc/xdrgen/templates/C/struct/encoder/variable_length_opaque.j2 | 8 + tools/net/sunrpc/xdrgen/templates/C/struct/encoder/variable_length_string.j2 | 8 + tools/net/sunrpc/xdrgen/templates/C/typedef/declaration/basic.j2 | 8 + tools/net/sunrpc/xdrgen/templates/C/typedef/declaration/fixed_length_array.j2 | 4 + tools/net/sunrpc/xdrgen/templates/C/typedef/declaration/fixed_length_opaque.j2 | 4 + tools/net/sunrpc/xdrgen/templates/C/typedef/declaration/variable_length_array.j2 | 4 + tools/net/sunrpc/xdrgen/templates/C/typedef/declaration/variable_length_opaque.j2 | 4 + tools/net/sunrpc/xdrgen/templates/C/typedef/declaration/variable_length_string.j2 | 4 + tools/net/sunrpc/xdrgen/templates/C/typedef/decoder/basic.j2 | 17 ++ tools/net/sunrpc/xdrgen/templates/C/typedef/decoder/fixed_length_array.j2 | 25 +++ tools/net/sunrpc/xdrgen/templates/C/typedef/decoder/fixed_length_opaque.j2 | 17 ++ tools/net/sunrpc/xdrgen/templates/C/typedef/decoder/variable_length_array.j2 | 26 +++ tools/net/sunrpc/xdrgen/templates/C/typedef/decoder/variable_length_opaque.j2 | 17 ++ tools/net/sunrpc/xdrgen/templates/C/typedef/decoder/variable_length_string.j2 | 17 ++ tools/net/sunrpc/xdrgen/templates/C/typedef/definition/basic.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/typedef/definition/fixed_length_array.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/typedef/definition/fixed_length_opaque.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/typedef/definition/variable_length_array.j2 | 9 + tools/net/sunrpc/xdrgen/templates/C/typedef/definition/variable_length_opaque.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/typedef/definition/variable_length_string.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/typedef/encoder/basic.j2 | 21 +++ tools/net/sunrpc/xdrgen/templates/C/typedef/encoder/fixed_length_array.j2 | 25 +++ tools/net/sunrpc/xdrgen/templates/C/typedef/encoder/fixed_length_opaque.j2 | 17 ++ tools/net/sunrpc/xdrgen/templates/C/typedef/encoder/variable_length_array.j2 | 30 ++++ tools/net/sunrpc/xdrgen/templates/C/typedef/encoder/variable_length_opaque.j2 | 17 ++ tools/net/sunrpc/xdrgen/templates/C/typedef/encoder/variable_length_string.j2 | 17 ++ tools/net/sunrpc/xdrgen/templates/C/union/decoder/basic.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/union/decoder/break.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/union/decoder/case_spec.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/union/decoder/close.j2 | 4 + tools/net/sunrpc/xdrgen/templates/C/union/decoder/default_spec.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/union/decoder/open.j2 | 12 ++ tools/net/sunrpc/xdrgen/templates/C/union/decoder/optional_data.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/union/decoder/switch_spec.j2 | 7 + tools/net/sunrpc/xdrgen/templates/C/union/decoder/variable_length_array.j2 | 13 ++ tools/net/sunrpc/xdrgen/templates/C/union/decoder/variable_length_opaque.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/union/decoder/variable_length_string.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/union/decoder/void.j2 | 3 + tools/net/sunrpc/xdrgen/templates/C/union/definition/case_spec.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/union/definition/close.j2 | 8 + tools/net/sunrpc/xdrgen/templates/C/union/definition/default_spec.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/union/definition/open.j2 | 6 + tools/net/sunrpc/xdrgen/templates/C/union/definition/switch_spec.j2 | 3 + tools/net/sunrpc/xdrgen/templates/C/union/encoder/basic.j2 | 10 ++ tools/net/sunrpc/xdrgen/templates/C/union/encoder/break.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/union/encoder/case_spec.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/union/encoder/close.j2 | 4 + tools/net/sunrpc/xdrgen/templates/C/union/encoder/default_spec.j2 | 2 + tools/net/sunrpc/xdrgen/templates/C/union/encoder/open.j2 | 12 ++ tools/net/sunrpc/xdrgen/templates/C/union/encoder/switch_spec.j2 | 7 + tools/net/sunrpc/xdrgen/templates/C/union/encoder/void.j2 | 3 + tools/net/sunrpc/xdrgen/tests/test.x | 36 ++++ tools/net/sunrpc/xdrgen/xdr_ast.py | 510 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ tools/net/sunrpc/xdrgen/xdr_parse.py | 36 ++++ tools/net/sunrpc/xdrgen/xdrgen | 132 ++++++++++++++ 200 files changed, 4959 insertions(+), 499 deletions(-) create mode 100644 include/linux/sunrpc/xdrgen/_builtins.h create mode 100644 include/linux/sunrpc/xdrgen/_defs.h create mode 100644 tools/net/sunrpc/xdrgen/.gitignore create mode 100644 tools/net/sunrpc/xdrgen/README create mode 100644 tools/net/sunrpc/xdrgen/__init__.py create mode 100644 tools/net/sunrpc/xdrgen/generators/__init__.py create mode 100644 tools/net/sunrpc/xdrgen/generators/constant.py create mode 100644 tools/net/sunrpc/xdrgen/generators/enum.py create mode 100644 tools/net/sunrpc/xdrgen/generators/header_bottom.py create mode 100644 tools/net/sunrpc/xdrgen/generators/header_top.py create mode 100644 tools/net/sunrpc/xdrgen/generators/pointer.py create mode 100644 tools/net/sunrpc/xdrgen/generators/program.py create mode 100644 tools/net/sunrpc/xdrgen/generators/source_top.py create mode 100644 tools/net/sunrpc/xdrgen/generators/struct.py create mode 100644 tools/net/sunrpc/xdrgen/generators/typedef.py create mode 100644 tools/net/sunrpc/xdrgen/generators/union.py create mode 100644 tools/net/sunrpc/xdrgen/grammars/xdr.lark create mode 100644 tools/net/sunrpc/xdrgen/subcmds/__init__.py create mode 100644 tools/net/sunrpc/xdrgen/subcmds/declarations.py create mode 100644 tools/net/sunrpc/xdrgen/subcmds/definitions.py create mode 100644 tools/net/sunrpc/xdrgen/subcmds/lint.py create mode 100644 tools/net/sunrpc/xdrgen/subcmds/source.py create mode 100644 tools/net/sunrpc/xdrgen/templates/C/constants/definition.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/enum/declaration/close.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/enum/decoder/enum.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/enum/definition/close.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/enum/definition/enumerator.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/enum/definition/open.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/enum/encoder/enum.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/header_bottom/declaration/header.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/header_bottom/definition/header.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/header_top/declaration/header.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/header_top/definition/header.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/declaration/close.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/basic.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/close.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/fixed_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/fixed_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/open.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/optional_data.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/variable_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/variable_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/variable_length_string.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/definition/basic.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/definition/close.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/definition/fixed_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/definition/fixed_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/definition/open.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/definition/optional_data.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/definition/variable_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/definition/variable_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/definition/variable_length_string.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/encoder/basic.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/encoder/close.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/encoder/fixed_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/encoder/fixed_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/encoder/open.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/encoder/optional_data.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/encoder/variable_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/encoder/variable_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/pointer/encoder/variable_length_string.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/program/declaration/argument.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/program/declaration/result.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/program/decoder/argument.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/program/decoder/result.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/program/definition/close.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/program/definition/open.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/program/definition/procedure.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/program/encoder/argument.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/program/encoder/result.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/source_top/client.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/source_top/server.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/declaration/close.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/decoder/basic.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/decoder/close.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/decoder/fixed_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/decoder/fixed_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/decoder/open.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/decoder/optional_data.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/decoder/variable_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/decoder/variable_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/decoder/variable_length_string.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/definition/basic.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/definition/close.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/definition/fixed_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/definition/fixed_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/definition/open.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/definition/optional_data.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/definition/variable_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/definition/variable_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/definition/variable_length_string.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/encoder/basic.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/encoder/close.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/encoder/fixed_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/encoder/fixed_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/encoder/open.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/encoder/optional_data.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/encoder/variable_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/encoder/variable_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/struct/encoder/variable_length_string.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/declaration/basic.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/declaration/fixed_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/declaration/fixed_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/declaration/variable_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/declaration/variable_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/declaration/variable_length_string.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/decoder/basic.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/decoder/fixed_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/decoder/fixed_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/decoder/variable_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/decoder/variable_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/decoder/variable_length_string.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/definition/basic.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/definition/fixed_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/definition/fixed_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/definition/variable_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/definition/variable_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/definition/variable_length_string.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/encoder/basic.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/encoder/fixed_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/encoder/fixed_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/encoder/variable_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/encoder/variable_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/typedef/encoder/variable_length_string.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/decoder/basic.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/decoder/break.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/decoder/case_spec.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/decoder/close.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/decoder/default_spec.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/decoder/open.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/decoder/optional_data.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/decoder/switch_spec.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/decoder/variable_length_array.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/decoder/variable_length_opaque.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/decoder/variable_length_string.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/decoder/void.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/definition/case_spec.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/definition/close.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/definition/default_spec.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/definition/open.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/definition/switch_spec.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/encoder/basic.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/encoder/break.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/encoder/case_spec.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/encoder/close.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/encoder/default_spec.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/encoder/open.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/encoder/switch_spec.j2 create mode 100644 tools/net/sunrpc/xdrgen/templates/C/union/encoder/void.j2 create mode 100644 tools/net/sunrpc/xdrgen/tests/test.x create mode 100644 tools/net/sunrpc/xdrgen/xdr_ast.py create mode 100644 tools/net/sunrpc/xdrgen/xdr_parse.py create mode 100755 tools/net/sunrpc/xdrgen/xdrgen -- Chuck Lever