From: Chuck Lever <cel@kernel.org>
To: NeilBrown <neil@brown.name>, Jeff Layton <jlayton@kernel.org>,
Olga Kornievskaia <okorniev@redhat.com>,
Dai Ngo <dai.ngo@oracle.com>, Tom Talpey <tom@talpey.com>
Cc: <linux-nfs@vger.kernel.org>
Subject: [PATCH v2 03/33] NFSD: Add infrastructure for generating NFSv3 XDR encoders and decoders
Date: Thu, 24 Sep 2026 13:09:42 -0400 [thread overview]
Message-ID: <20260924171012.3978-4-cel@kernel.org> (raw)
In-Reply-To: <20260924171012.3978-1-cel@kernel.org>
NFSD's NFSv3 XDR codecs are hand-maintained; they are being converted
to xdrgen-generated code one RPC procedure at a time. The first step
is to generate and commit the xdrgen C code based on nfs3.x. The
generated code can be refreshed any time nfs3.x is modified by
running "(cd fs/nfsd && make xdrgen)".
Signed-off-by: Chuck Lever <cel@kernel.org>
---
Documentation/sunrpc/xdr/nfs3.x | 2 +
fs/nfsd/Makefile | 15 +-
fs/nfsd/nfs3xdr_gen.c | 3768 ++++++++++++++++++++++++++++
fs/nfsd/nfs3xdr_gen.h | 60 +
include/linux/sunrpc/xdrgen/nfs3.h | 1092 ++++++++
5 files changed, 4933 insertions(+), 4 deletions(-)
create mode 100644 fs/nfsd/nfs3xdr_gen.c
create mode 100644 fs/nfsd/nfs3xdr_gen.h
create mode 100644 include/linux/sunrpc/xdrgen/nfs3.h
diff --git a/Documentation/sunrpc/xdr/nfs3.x b/Documentation/sunrpc/xdr/nfs3.x
index 7996775fb4ae..9feabfda94e7 100644
--- a/Documentation/sunrpc/xdr/nfs3.x
+++ b/Documentation/sunrpc/xdr/nfs3.x
@@ -39,6 +39,8 @@
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+pragma header nfs3;
+
const NFS3_FHSIZE = 64;
const NFS3_COOKIEVERFSIZE = 8;
const NFS3_CREATEVERFSIZE = 8;
diff --git a/fs/nfsd/Makefile b/fs/nfsd/Makefile
index 05fb814f760b..1dc449af28f4 100644
--- a/fs/nfsd/Makefile
+++ b/fs/nfsd/Makefile
@@ -12,8 +12,8 @@ nfsd-y += trace.o
nfsd-y += nfssvc.o nfsctl.o nfsfh.o vfs.o \
export.o auth.o lockd.o nfscache.o \
- stats.o filecache.o nfs3proc.o nfs3xdr.o \
- netlink.o
+ stats.o filecache.o netlink.o \
+ nfs3proc.o nfs3xdr.o nfs3xdr_gen.o
nfsd-$(CONFIG_NFSD_V2) += nfsproc.o nfsxdr.o nfs2xdr_gen.o
nfsd-$(CONFIG_NFSD_V2_ACL) += nfs2acl.o
nfsd-$(CONFIG_NFSD_V3_ACL) += nfs3acl.o
@@ -38,23 +38,30 @@ nfsd-$(CONFIG_DEBUG_FS) += debugfs.o
.PHONY: xdrgen
XDRGEN_DEFINITIONS = ../../include/linux/sunrpc/xdrgen/nfs2.h \
+ ../../include/linux/sunrpc/xdrgen/nfs3.h \
../../include/linux/sunrpc/xdrgen/nfs4_1.h
-XDRGEN_DECLARATIONS = nfs2xdr_gen.h nfs4xdr_gen.h
-XDRGEN_SOURCE = nfs2xdr_gen.c nfs4xdr_gen.c
+XDRGEN_DECLARATIONS = nfs2xdr_gen.h nfs3xdr_gen.h nfs4xdr_gen.h
+XDRGEN_SOURCE = nfs2xdr_gen.c nfs3xdr_gen.c nfs4xdr_gen.c
xdrgen: $(XDRGEN_DEFINITIONS) $(XDRGEN_DECLARATIONS) $(XDRGEN_SOURCE)
../../include/linux/sunrpc/xdrgen/nfs2.h: ../../Documentation/sunrpc/xdr/nfs2.x
../../tools/net/sunrpc/xdrgen/xdrgen definitions $< > $@
+../../include/linux/sunrpc/xdrgen/nfs3.h: ../../Documentation/sunrpc/xdr/nfs3.x
+ ../../tools/net/sunrpc/xdrgen/xdrgen definitions $< > $@
../../include/linux/sunrpc/xdrgen/nfs4_1.h: ../../Documentation/sunrpc/xdr/nfs4_1.x
../../tools/net/sunrpc/xdrgen/xdrgen definitions $< > $@
nfs2xdr_gen.h: ../../Documentation/sunrpc/xdr/nfs2.x
../../tools/net/sunrpc/xdrgen/xdrgen declarations $< > $@
+nfs3xdr_gen.h: ../../Documentation/sunrpc/xdr/nfs3.x
+ ../../tools/net/sunrpc/xdrgen/xdrgen declarations $< > $@
nfs4xdr_gen.h: ../../Documentation/sunrpc/xdr/nfs4_1.x
../../tools/net/sunrpc/xdrgen/xdrgen declarations $< > $@
nfs2xdr_gen.c: ../../Documentation/sunrpc/xdr/nfs2.x
../../tools/net/sunrpc/xdrgen/xdrgen source $< > $@
+nfs3xdr_gen.c: ../../Documentation/sunrpc/xdr/nfs3.x
+ ../../tools/net/sunrpc/xdrgen/xdrgen source $< > $@
nfs4xdr_gen.c: ../../Documentation/sunrpc/xdr/nfs4_1.x
../../tools/net/sunrpc/xdrgen/xdrgen source $< > $@
diff --git a/fs/nfsd/nfs3xdr_gen.c b/fs/nfsd/nfs3xdr_gen.c
new file mode 100644
index 000000000000..48b382ccfc81
--- /dev/null
+++ b/fs/nfsd/nfs3xdr_gen.c
@@ -0,0 +1,3768 @@
+// SPDX-License-Identifier: GPL-2.0
+// Generated by xdrgen. Manual edits will be lost.
+// XDR specification file: ../../Documentation/sunrpc/xdr/nfs3.x
+// XDR specification modification time: Fri Jul 10 23:20:55 2026
+
+#include <linux/sunrpc/svc.h>
+
+#include "nfs3xdr_gen.h"
+
+static bool __maybe_unused
+xdrgen_decode_uint64(struct xdr_stream *xdr, uint64 *ptr)
+{
+ return xdrgen_decode_unsigned_hyper(xdr, ptr);
+}
+
+static bool __maybe_unused
+xdrgen_decode_int64(struct xdr_stream *xdr, int64 *ptr)
+{
+ return xdrgen_decode_hyper(xdr, ptr);
+}
+
+static bool __maybe_unused
+xdrgen_decode_uint32(struct xdr_stream *xdr, uint32 *ptr)
+{
+ return xdrgen_decode_unsigned_long(xdr, ptr);
+}
+
+static bool __maybe_unused
+xdrgen_decode_int32(struct xdr_stream *xdr, int32 *ptr)
+{
+ return xdrgen_decode_long(xdr, ptr);
+}
+
+static bool __maybe_unused
+xdrgen_decode_filename3(struct xdr_stream *xdr, filename3 *ptr)
+{
+ return xdrgen_decode_string(xdr, ptr, 0);
+}
+
+static bool __maybe_unused
+xdrgen_decode_nfspath3(struct xdr_stream *xdr, nfspath3 *ptr)
+{
+ return xdrgen_decode_string(xdr, ptr, 0);
+}
+
+static bool __maybe_unused
+xdrgen_decode_fileid3(struct xdr_stream *xdr, fileid3 *ptr)
+{
+ return xdrgen_decode_uint64(xdr, ptr);
+}
+
+static bool __maybe_unused
+xdrgen_decode_cookie3(struct xdr_stream *xdr, cookie3 *ptr)
+{
+ return xdrgen_decode_uint64(xdr, ptr);
+}
+
+static bool __maybe_unused
+xdrgen_decode_cookieverf3(struct xdr_stream *xdr, cookieverf3 *ptr)
+{
+ return xdr_stream_decode_opaque_fixed(xdr, ptr, NFS3_COOKIEVERFSIZE) == 0;
+}
+
+static bool __maybe_unused
+xdrgen_decode_createverf3(struct xdr_stream *xdr, createverf3 *ptr)
+{
+ return xdr_stream_decode_opaque_fixed(xdr, ptr, NFS3_CREATEVERFSIZE) == 0;
+}
+
+static bool __maybe_unused
+xdrgen_decode_writeverf3(struct xdr_stream *xdr, writeverf3 *ptr)
+{
+ return xdr_stream_decode_opaque_fixed(xdr, ptr, NFS3_WRITEVERFSIZE) == 0;
+}
+
+static bool __maybe_unused
+xdrgen_decode_uid3(struct xdr_stream *xdr, uid3 *ptr)
+{
+ return xdrgen_decode_uint32(xdr, ptr);
+}
+
+static bool __maybe_unused
+xdrgen_decode_gid3(struct xdr_stream *xdr, gid3 *ptr)
+{
+ return xdrgen_decode_uint32(xdr, ptr);
+}
+
+static bool __maybe_unused
+xdrgen_decode_size3(struct xdr_stream *xdr, size3 *ptr)
+{
+ return xdrgen_decode_uint64(xdr, ptr);
+}
+
+static bool __maybe_unused
+xdrgen_decode_offset3(struct xdr_stream *xdr, offset3 *ptr)
+{
+ return xdrgen_decode_uint64(xdr, ptr);
+}
+
+static bool __maybe_unused
+xdrgen_decode_mode3(struct xdr_stream *xdr, mode3 *ptr)
+{
+ return xdrgen_decode_uint32(xdr, ptr);
+}
+
+static bool __maybe_unused
+xdrgen_decode_count3(struct xdr_stream *xdr, count3 *ptr)
+{
+ return xdrgen_decode_uint32(xdr, ptr);
+}
+
+static bool __maybe_unused
+xdrgen_decode_nfsstat3(struct xdr_stream *xdr, nfsstat3 *ptr)
+{
+ u32 val;
+
+ if (xdr_stream_decode_u32(xdr, &val) < 0)
+ return false;
+ /* Compiler may optimize to a range check for dense enums */
+ switch (val) {
+ case NFS3_OK:
+ case NFS3ERR_PERM:
+ case NFS3ERR_NOENT:
+ case NFS3ERR_IO:
+ case NFS3ERR_NXIO:
+ case NFS3ERR_ACCES:
+ case NFS3ERR_EXIST:
+ case NFS3ERR_XDEV:
+ case NFS3ERR_NODEV:
+ case NFS3ERR_NOTDIR:
+ case NFS3ERR_ISDIR:
+ case NFS3ERR_INVAL:
+ case NFS3ERR_FBIG:
+ case NFS3ERR_NOSPC:
+ case NFS3ERR_ROFS:
+ case NFS3ERR_MLINK:
+ case NFS3ERR_NAMETOOLONG:
+ case NFS3ERR_NOTEMPTY:
+ case NFS3ERR_DQUOT:
+ case NFS3ERR_STALE:
+ case NFS3ERR_REMOTE:
+ case NFS3ERR_BADHANDLE:
+ case NFS3ERR_NOT_SYNC:
+ case NFS3ERR_BAD_COOKIE:
+ case NFS3ERR_NOTSUPP:
+ case NFS3ERR_TOOSMALL:
+ case NFS3ERR_SERVERFAULT:
+ case NFS3ERR_BADTYPE:
+ case NFS3ERR_JUKEBOX:
+ break;
+ default:
+ return false;
+ }
+ *ptr = val;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_ftype3(struct xdr_stream *xdr, ftype3 *ptr)
+{
+ u32 val;
+
+ if (xdr_stream_decode_u32(xdr, &val) < 0)
+ return false;
+ /* Compiler may optimize to a range check for dense enums */
+ switch (val) {
+ case NF3REG:
+ case NF3DIR:
+ case NF3BLK:
+ case NF3CHR:
+ case NF3LNK:
+ case NF3SOCK:
+ case NF3FIFO:
+ break;
+ default:
+ return false;
+ }
+ *ptr = val;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_specdata3(struct xdr_stream *xdr, struct specdata3 *ptr)
+{
+ if (!xdrgen_decode_uint32(xdr, &ptr->specdata1))
+ return false;
+ if (!xdrgen_decode_uint32(xdr, &ptr->specdata2))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_nfs_fh3(struct xdr_stream *xdr, struct nfs_fh3 *ptr)
+{
+ if (!xdrgen_decode_opaque(xdr, &ptr->data, NFS3_FHSIZE))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_nfstime3(struct xdr_stream *xdr, struct nfstime3 *ptr)
+{
+ if (!xdrgen_decode_uint32(xdr, &ptr->seconds))
+ return false;
+ if (!xdrgen_decode_uint32(xdr, &ptr->nseconds))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_fattr3(struct xdr_stream *xdr, struct fattr3 *ptr)
+{
+ if (!xdrgen_decode_ftype3(xdr, &ptr->type))
+ return false;
+ if (!xdrgen_decode_mode3(xdr, &ptr->mode))
+ return false;
+ if (!xdrgen_decode_uint32(xdr, &ptr->nlink))
+ return false;
+ if (!xdrgen_decode_uid3(xdr, &ptr->uid))
+ return false;
+ if (!xdrgen_decode_gid3(xdr, &ptr->gid))
+ return false;
+ if (!xdrgen_decode_size3(xdr, &ptr->size))
+ return false;
+ if (!xdrgen_decode_size3(xdr, &ptr->used))
+ return false;
+ if (!xdrgen_decode_specdata3(xdr, &ptr->rdev))
+ return false;
+ if (!xdrgen_decode_uint64(xdr, &ptr->fsid))
+ return false;
+ if (!xdrgen_decode_fileid3(xdr, &ptr->fileid))
+ return false;
+ if (!xdrgen_decode_nfstime3(xdr, &ptr->atime))
+ return false;
+ if (!xdrgen_decode_nfstime3(xdr, &ptr->mtime))
+ return false;
+ if (!xdrgen_decode_nfstime3(xdr, &ptr->ctime))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_post_op_attr(struct xdr_stream *xdr, struct post_op_attr *ptr)
+{
+ if (!xdrgen_decode_bool(xdr, &ptr->attributes_follow))
+ return false;
+ if (ptr->attributes_follow) {
+ if (!xdrgen_decode_fattr3(xdr, &ptr->u.attributes))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_wcc_attr(struct xdr_stream *xdr, struct wcc_attr *ptr)
+{
+ if (!xdrgen_decode_size3(xdr, &ptr->size))
+ return false;
+ if (!xdrgen_decode_nfstime3(xdr, &ptr->mtime))
+ return false;
+ if (!xdrgen_decode_nfstime3(xdr, &ptr->ctime))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_pre_op_attr(struct xdr_stream *xdr, struct pre_op_attr *ptr)
+{
+ if (!xdrgen_decode_bool(xdr, &ptr->attributes_follow))
+ return false;
+ if (ptr->attributes_follow) {
+ if (!xdrgen_decode_wcc_attr(xdr, &ptr->u.attributes))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_wcc_data(struct xdr_stream *xdr, struct wcc_data *ptr)
+{
+ if (!xdrgen_decode_pre_op_attr(xdr, &ptr->before))
+ return false;
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->after))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_post_op_fh3(struct xdr_stream *xdr, struct post_op_fh3 *ptr)
+{
+ if (!xdrgen_decode_bool(xdr, &ptr->handle_follows))
+ return false;
+ if (ptr->handle_follows) {
+ if (!xdrgen_decode_nfs_fh3(xdr, &ptr->u.handle))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_time_how(struct xdr_stream *xdr, time_how *ptr)
+{
+ u32 val;
+
+ if (xdr_stream_decode_u32(xdr, &val) < 0)
+ return false;
+ /* Compiler may optimize to a range check for dense enums */
+ switch (val) {
+ case DONT_CHANGE:
+ case SET_TO_SERVER_TIME:
+ case SET_TO_CLIENT_TIME:
+ break;
+ default:
+ return false;
+ }
+ *ptr = val;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_set_mode3(struct xdr_stream *xdr, struct set_mode3 *ptr)
+{
+ if (!xdrgen_decode_bool(xdr, &ptr->set_it))
+ return false;
+ if (ptr->set_it) {
+ if (!xdrgen_decode_mode3(xdr, &ptr->u.mode))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_set_uid3(struct xdr_stream *xdr, struct set_uid3 *ptr)
+{
+ if (!xdrgen_decode_bool(xdr, &ptr->set_it))
+ return false;
+ if (ptr->set_it) {
+ if (!xdrgen_decode_uid3(xdr, &ptr->u.uid))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_set_gid3(struct xdr_stream *xdr, struct set_gid3 *ptr)
+{
+ if (!xdrgen_decode_bool(xdr, &ptr->set_it))
+ return false;
+ if (ptr->set_it) {
+ if (!xdrgen_decode_gid3(xdr, &ptr->u.gid))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_set_size3(struct xdr_stream *xdr, struct set_size3 *ptr)
+{
+ if (!xdrgen_decode_bool(xdr, &ptr->set_it))
+ return false;
+ if (ptr->set_it) {
+ if (!xdrgen_decode_size3(xdr, &ptr->u.size))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_set_atime(struct xdr_stream *xdr, struct set_atime *ptr)
+{
+ if (!xdrgen_decode_time_how(xdr, &ptr->set_it))
+ return false;
+ switch (ptr->set_it) {
+ case SET_TO_CLIENT_TIME:
+ if (!xdrgen_decode_nfstime3(xdr, &ptr->u.atime))
+ return false;
+ break;
+ default:
+ break;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_set_mtime(struct xdr_stream *xdr, struct set_mtime *ptr)
+{
+ if (!xdrgen_decode_time_how(xdr, &ptr->set_it))
+ return false;
+ switch (ptr->set_it) {
+ case SET_TO_CLIENT_TIME:
+ if (!xdrgen_decode_nfstime3(xdr, &ptr->u.mtime))
+ return false;
+ break;
+ default:
+ break;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_sattr3(struct xdr_stream *xdr, struct sattr3 *ptr)
+{
+ if (!xdrgen_decode_set_mode3(xdr, &ptr->mode))
+ return false;
+ if (!xdrgen_decode_set_uid3(xdr, &ptr->uid))
+ return false;
+ if (!xdrgen_decode_set_gid3(xdr, &ptr->gid))
+ return false;
+ if (!xdrgen_decode_set_size3(xdr, &ptr->size))
+ return false;
+ if (!xdrgen_decode_set_atime(xdr, &ptr->atime))
+ return false;
+ if (!xdrgen_decode_set_mtime(xdr, &ptr->mtime))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_diropargs3(struct xdr_stream *xdr, struct diropargs3 *ptr)
+{
+ if (!xdrgen_decode_nfs_fh3(xdr, &ptr->dir))
+ return false;
+ if (!xdrgen_decode_filename3(xdr, &ptr->name))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_GETATTR3args(struct xdr_stream *xdr, struct GETATTR3args *ptr)
+{
+ if (!xdrgen_decode_nfs_fh3(xdr, &ptr->object))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_GETATTR3resok(struct xdr_stream *xdr, struct GETATTR3resok *ptr)
+{
+ if (!xdrgen_decode_fattr3(xdr, &ptr->obj_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_GETATTR3res(struct xdr_stream *xdr, struct GETATTR3res *ptr)
+{
+ if (!xdrgen_decode_nfsstat3(xdr, &ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_decode_GETATTR3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ break;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_sattrguard3(struct xdr_stream *xdr, struct sattrguard3 *ptr)
+{
+ if (!xdrgen_decode_bool(xdr, &ptr->check))
+ return false;
+ if (ptr->check) {
+ if (!xdrgen_decode_nfstime3(xdr, &ptr->u.obj_ctime))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_SETATTR3args(struct xdr_stream *xdr, struct SETATTR3args *ptr)
+{
+ if (!xdrgen_decode_nfs_fh3(xdr, &ptr->object))
+ return false;
+ if (!xdrgen_decode_sattr3(xdr, &ptr->new_attributes))
+ return false;
+ if (!xdrgen_decode_sattrguard3(xdr, &ptr->guard))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_SETATTR3resok(struct xdr_stream *xdr, struct SETATTR3resok *ptr)
+{
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->obj_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_SETATTR3resfail(struct xdr_stream *xdr, struct SETATTR3resfail *ptr)
+{
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->obj_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_SETATTR3res(struct xdr_stream *xdr, struct SETATTR3res *ptr)
+{
+ if (!xdrgen_decode_nfsstat3(xdr, &ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_decode_SETATTR3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_decode_SETATTR3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_LOOKUP3args(struct xdr_stream *xdr, struct LOOKUP3args *ptr)
+{
+ if (!xdrgen_decode_diropargs3(xdr, &ptr->what))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_LOOKUP3resok(struct xdr_stream *xdr, struct LOOKUP3resok *ptr)
+{
+ if (!xdrgen_decode_nfs_fh3(xdr, &ptr->object))
+ return false;
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->obj_attributes))
+ return false;
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->dir_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_LOOKUP3resfail(struct xdr_stream *xdr, struct LOOKUP3resfail *ptr)
+{
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->dir_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_LOOKUP3res(struct xdr_stream *xdr, struct LOOKUP3res *ptr)
+{
+ if (!xdrgen_decode_nfsstat3(xdr, &ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_decode_LOOKUP3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_decode_LOOKUP3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_ACCESS3args(struct xdr_stream *xdr, struct ACCESS3args *ptr)
+{
+ if (!xdrgen_decode_nfs_fh3(xdr, &ptr->object))
+ return false;
+ if (!xdrgen_decode_uint32(xdr, &ptr->access))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_ACCESS3resok(struct xdr_stream *xdr, struct ACCESS3resok *ptr)
+{
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->obj_attributes))
+ return false;
+ if (!xdrgen_decode_uint32(xdr, &ptr->access))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_ACCESS3resfail(struct xdr_stream *xdr, struct ACCESS3resfail *ptr)
+{
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->obj_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_ACCESS3res(struct xdr_stream *xdr, struct ACCESS3res *ptr)
+{
+ if (!xdrgen_decode_nfsstat3(xdr, &ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_decode_ACCESS3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_decode_ACCESS3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_READLINK3args(struct xdr_stream *xdr, struct READLINK3args *ptr)
+{
+ if (!xdrgen_decode_nfs_fh3(xdr, &ptr->symlink))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_READLINK3resok(struct xdr_stream *xdr, struct READLINK3resok *ptr)
+{
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->symlink_attributes))
+ return false;
+ if (!xdrgen_decode_nfspath3(xdr, &ptr->data))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_READLINK3resfail(struct xdr_stream *xdr, struct READLINK3resfail *ptr)
+{
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->symlink_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_READLINK3res(struct xdr_stream *xdr, struct READLINK3res *ptr)
+{
+ if (!xdrgen_decode_nfsstat3(xdr, &ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_decode_READLINK3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_decode_READLINK3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_READ3args(struct xdr_stream *xdr, struct READ3args *ptr)
+{
+ if (!xdrgen_decode_nfs_fh3(xdr, &ptr->file))
+ return false;
+ if (!xdrgen_decode_offset3(xdr, &ptr->offset))
+ return false;
+ if (!xdrgen_decode_count3(xdr, &ptr->count))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_READ3resok(struct xdr_stream *xdr, struct READ3resok *ptr)
+{
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->file_attributes))
+ return false;
+ if (!xdrgen_decode_count3(xdr, &ptr->count))
+ return false;
+ if (!xdrgen_decode_bool(xdr, &ptr->eof))
+ return false;
+ if (!xdrgen_decode_opaque(xdr, &ptr->data, 0))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_READ3resfail(struct xdr_stream *xdr, struct READ3resfail *ptr)
+{
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->file_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_READ3res(struct xdr_stream *xdr, struct READ3res *ptr)
+{
+ if (!xdrgen_decode_nfsstat3(xdr, &ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_decode_READ3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_decode_READ3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_stable_how(struct xdr_stream *xdr, stable_how *ptr)
+{
+ u32 val;
+
+ if (xdr_stream_decode_u32(xdr, &val) < 0)
+ return false;
+ /* Compiler may optimize to a range check for dense enums */
+ switch (val) {
+ case UNSTABLE:
+ case DATA_SYNC:
+ case FILE_SYNC:
+ break;
+ default:
+ return false;
+ }
+ *ptr = val;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_WRITE3args(struct xdr_stream *xdr, struct WRITE3args *ptr)
+{
+ if (!xdrgen_decode_nfs_fh3(xdr, &ptr->file))
+ return false;
+ if (!xdrgen_decode_offset3(xdr, &ptr->offset))
+ return false;
+ if (!xdrgen_decode_count3(xdr, &ptr->count))
+ return false;
+ if (!xdrgen_decode_stable_how(xdr, &ptr->stable))
+ return false;
+ if (!xdrgen_decode_opaque(xdr, &ptr->data, 0))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_WRITE3resok(struct xdr_stream *xdr, struct WRITE3resok *ptr)
+{
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->file_wcc))
+ return false;
+ if (!xdrgen_decode_count3(xdr, &ptr->count))
+ return false;
+ if (!xdrgen_decode_stable_how(xdr, &ptr->committed))
+ return false;
+ if (!xdrgen_decode_writeverf3(xdr, &ptr->verf))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_WRITE3resfail(struct xdr_stream *xdr, struct WRITE3resfail *ptr)
+{
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->file_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_WRITE3res(struct xdr_stream *xdr, struct WRITE3res *ptr)
+{
+ if (!xdrgen_decode_nfsstat3(xdr, &ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_decode_WRITE3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_decode_WRITE3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_createmode3(struct xdr_stream *xdr, createmode3 *ptr)
+{
+ u32 val;
+
+ if (xdr_stream_decode_u32(xdr, &val) < 0)
+ return false;
+ /* Compiler may optimize to a range check for dense enums */
+ switch (val) {
+ case UNCHECKED:
+ case GUARDED:
+ case EXCLUSIVE:
+ break;
+ default:
+ return false;
+ }
+ *ptr = val;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_createhow3(struct xdr_stream *xdr, struct createhow3 *ptr)
+{
+ if (!xdrgen_decode_createmode3(xdr, &ptr->mode))
+ return false;
+ switch (ptr->mode) {
+ case UNCHECKED:
+ case GUARDED:
+ if (!xdrgen_decode_sattr3(xdr, &ptr->u.obj_attributes))
+ return false;
+ break;
+ case EXCLUSIVE:
+ if (!xdrgen_decode_createverf3(xdr, &ptr->u.verf))
+ return false;
+ break;
+ default:
+ break;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_CREATE3args(struct xdr_stream *xdr, struct CREATE3args *ptr)
+{
+ if (!xdrgen_decode_diropargs3(xdr, &ptr->where))
+ return false;
+ if (!xdrgen_decode_createhow3(xdr, &ptr->how))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_CREATE3resok(struct xdr_stream *xdr, struct CREATE3resok *ptr)
+{
+ if (!xdrgen_decode_post_op_fh3(xdr, &ptr->obj))
+ return false;
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->obj_attributes))
+ return false;
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_CREATE3resfail(struct xdr_stream *xdr, struct CREATE3resfail *ptr)
+{
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_CREATE3res(struct xdr_stream *xdr, struct CREATE3res *ptr)
+{
+ if (!xdrgen_decode_nfsstat3(xdr, &ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_decode_CREATE3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_decode_CREATE3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_MKDIR3args(struct xdr_stream *xdr, struct MKDIR3args *ptr)
+{
+ if (!xdrgen_decode_diropargs3(xdr, &ptr->where))
+ return false;
+ if (!xdrgen_decode_sattr3(xdr, &ptr->attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_MKDIR3resok(struct xdr_stream *xdr, struct MKDIR3resok *ptr)
+{
+ if (!xdrgen_decode_post_op_fh3(xdr, &ptr->obj))
+ return false;
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->obj_attributes))
+ return false;
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_MKDIR3resfail(struct xdr_stream *xdr, struct MKDIR3resfail *ptr)
+{
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_MKDIR3res(struct xdr_stream *xdr, struct MKDIR3res *ptr)
+{
+ if (!xdrgen_decode_nfsstat3(xdr, &ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_decode_MKDIR3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_decode_MKDIR3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_symlinkdata3(struct xdr_stream *xdr, struct symlinkdata3 *ptr)
+{
+ if (!xdrgen_decode_sattr3(xdr, &ptr->symlink_attributes))
+ return false;
+ if (!xdrgen_decode_nfspath3(xdr, &ptr->symlink_data))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_SYMLINK3args(struct xdr_stream *xdr, struct SYMLINK3args *ptr)
+{
+ if (!xdrgen_decode_diropargs3(xdr, &ptr->where))
+ return false;
+ if (!xdrgen_decode_symlinkdata3(xdr, &ptr->symlink))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_SYMLINK3resok(struct xdr_stream *xdr, struct SYMLINK3resok *ptr)
+{
+ if (!xdrgen_decode_post_op_fh3(xdr, &ptr->obj))
+ return false;
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->obj_attributes))
+ return false;
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_SYMLINK3resfail(struct xdr_stream *xdr, struct SYMLINK3resfail *ptr)
+{
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_SYMLINK3res(struct xdr_stream *xdr, struct SYMLINK3res *ptr)
+{
+ if (!xdrgen_decode_nfsstat3(xdr, &ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_decode_SYMLINK3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_decode_SYMLINK3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_devicedata3(struct xdr_stream *xdr, struct devicedata3 *ptr)
+{
+ if (!xdrgen_decode_sattr3(xdr, &ptr->dev_attributes))
+ return false;
+ if (!xdrgen_decode_specdata3(xdr, &ptr->spec))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_mknoddata3(struct xdr_stream *xdr, struct mknoddata3 *ptr)
+{
+ if (!xdrgen_decode_ftype3(xdr, &ptr->type))
+ return false;
+ switch (ptr->type) {
+ case NF3CHR:
+ case NF3BLK:
+ if (!xdrgen_decode_devicedata3(xdr, &ptr->u.device))
+ return false;
+ break;
+ case NF3SOCK:
+ case NF3FIFO:
+ if (!xdrgen_decode_sattr3(xdr, &ptr->u.pipe_attributes))
+ return false;
+ break;
+ default:
+ break;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_MKNOD3args(struct xdr_stream *xdr, struct MKNOD3args *ptr)
+{
+ if (!xdrgen_decode_diropargs3(xdr, &ptr->where))
+ return false;
+ if (!xdrgen_decode_mknoddata3(xdr, &ptr->what))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_MKNOD3resok(struct xdr_stream *xdr, struct MKNOD3resok *ptr)
+{
+ if (!xdrgen_decode_post_op_fh3(xdr, &ptr->obj))
+ return false;
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->obj_attributes))
+ return false;
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_MKNOD3resfail(struct xdr_stream *xdr, struct MKNOD3resfail *ptr)
+{
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_MKNOD3res(struct xdr_stream *xdr, struct MKNOD3res *ptr)
+{
+ if (!xdrgen_decode_nfsstat3(xdr, &ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_decode_MKNOD3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_decode_MKNOD3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_REMOVE3args(struct xdr_stream *xdr, struct REMOVE3args *ptr)
+{
+ if (!xdrgen_decode_diropargs3(xdr, &ptr->object))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_REMOVE3resok(struct xdr_stream *xdr, struct REMOVE3resok *ptr)
+{
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_REMOVE3resfail(struct xdr_stream *xdr, struct REMOVE3resfail *ptr)
+{
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_REMOVE3res(struct xdr_stream *xdr, struct REMOVE3res *ptr)
+{
+ if (!xdrgen_decode_nfsstat3(xdr, &ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_decode_REMOVE3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_decode_REMOVE3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_RMDIR3args(struct xdr_stream *xdr, struct RMDIR3args *ptr)
+{
+ if (!xdrgen_decode_diropargs3(xdr, &ptr->object))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_RMDIR3resok(struct xdr_stream *xdr, struct RMDIR3resok *ptr)
+{
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_RMDIR3resfail(struct xdr_stream *xdr, struct RMDIR3resfail *ptr)
+{
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_RMDIR3res(struct xdr_stream *xdr, struct RMDIR3res *ptr)
+{
+ if (!xdrgen_decode_nfsstat3(xdr, &ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_decode_RMDIR3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_decode_RMDIR3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_RENAME3args(struct xdr_stream *xdr, struct RENAME3args *ptr)
+{
+ if (!xdrgen_decode_diropargs3(xdr, &ptr->from))
+ return false;
+ if (!xdrgen_decode_diropargs3(xdr, &ptr->to))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_RENAME3resok(struct xdr_stream *xdr, struct RENAME3resok *ptr)
+{
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->fromdir_wcc))
+ return false;
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->todir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_RENAME3resfail(struct xdr_stream *xdr, struct RENAME3resfail *ptr)
+{
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->fromdir_wcc))
+ return false;
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->todir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_RENAME3res(struct xdr_stream *xdr, struct RENAME3res *ptr)
+{
+ if (!xdrgen_decode_nfsstat3(xdr, &ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_decode_RENAME3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_decode_RENAME3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_LINK3args(struct xdr_stream *xdr, struct LINK3args *ptr)
+{
+ if (!xdrgen_decode_nfs_fh3(xdr, &ptr->file))
+ return false;
+ if (!xdrgen_decode_diropargs3(xdr, &ptr->link))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_LINK3resok(struct xdr_stream *xdr, struct LINK3resok *ptr)
+{
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->file_attributes))
+ return false;
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->linkdir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_LINK3resfail(struct xdr_stream *xdr, struct LINK3resfail *ptr)
+{
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->file_attributes))
+ return false;
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->linkdir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_LINK3res(struct xdr_stream *xdr, struct LINK3res *ptr)
+{
+ if (!xdrgen_decode_nfsstat3(xdr, &ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_decode_LINK3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_decode_LINK3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_READDIR3args(struct xdr_stream *xdr, struct READDIR3args *ptr)
+{
+ if (!xdrgen_decode_nfs_fh3(xdr, &ptr->dir))
+ return false;
+ if (!xdrgen_decode_cookie3(xdr, &ptr->cookie))
+ return false;
+ if (!xdrgen_decode_cookieverf3(xdr, &ptr->cookieverf))
+ return false;
+ if (!xdrgen_decode_count3(xdr, &ptr->count))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_entry3(struct xdr_stream *xdr, struct entry3 *ptr)
+{
+ bool opted;
+
+ if (!xdrgen_decode_bool(xdr, &opted))
+ return false;
+ if (!opted)
+ return true;
+
+ if (!xdrgen_decode_fileid3(xdr, &ptr->fileid))
+ return false;
+ if (!xdrgen_decode_filename3(xdr, &ptr->name))
+ return false;
+ if (!xdrgen_decode_cookie3(xdr, &ptr->cookie))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_dirlist3(struct xdr_stream *xdr, struct dirlist3 *ptr)
+{
+ if (!xdrgen_decode_entry3(xdr, ptr->entries))
+ return false;
+ if (!xdrgen_decode_bool(xdr, &ptr->eof))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_READDIR3resok(struct xdr_stream *xdr, struct READDIR3resok *ptr)
+{
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->dir_attributes))
+ return false;
+ if (!xdrgen_decode_cookieverf3(xdr, &ptr->cookieverf))
+ return false;
+ if (!xdrgen_decode_dirlist3(xdr, &ptr->reply))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_READDIR3resfail(struct xdr_stream *xdr, struct READDIR3resfail *ptr)
+{
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->dir_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_READDIR3res(struct xdr_stream *xdr, struct READDIR3res *ptr)
+{
+ if (!xdrgen_decode_nfsstat3(xdr, &ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_decode_READDIR3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_decode_READDIR3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_READDIRPLUS3args(struct xdr_stream *xdr, struct READDIRPLUS3args *ptr)
+{
+ if (!xdrgen_decode_nfs_fh3(xdr, &ptr->dir))
+ return false;
+ if (!xdrgen_decode_cookie3(xdr, &ptr->cookie))
+ return false;
+ if (!xdrgen_decode_cookieverf3(xdr, &ptr->cookieverf))
+ return false;
+ if (!xdrgen_decode_count3(xdr, &ptr->dircount))
+ return false;
+ if (!xdrgen_decode_count3(xdr, &ptr->maxcount))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_entryplus3(struct xdr_stream *xdr, struct entryplus3 *ptr)
+{
+ bool opted;
+
+ if (!xdrgen_decode_bool(xdr, &opted))
+ return false;
+ if (!opted)
+ return true;
+
+ if (!xdrgen_decode_fileid3(xdr, &ptr->fileid))
+ return false;
+ if (!xdrgen_decode_filename3(xdr, &ptr->name))
+ return false;
+ if (!xdrgen_decode_cookie3(xdr, &ptr->cookie))
+ return false;
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->name_attributes))
+ return false;
+ if (!xdrgen_decode_post_op_fh3(xdr, &ptr->name_handle))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_dirlistplus3(struct xdr_stream *xdr, struct dirlistplus3 *ptr)
+{
+ if (!xdrgen_decode_entryplus3(xdr, ptr->entries))
+ return false;
+ if (!xdrgen_decode_bool(xdr, &ptr->eof))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_READDIRPLUS3resok(struct xdr_stream *xdr, struct READDIRPLUS3resok *ptr)
+{
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->dir_attributes))
+ return false;
+ if (!xdrgen_decode_cookieverf3(xdr, &ptr->cookieverf))
+ return false;
+ if (!xdrgen_decode_dirlistplus3(xdr, &ptr->reply))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_READDIRPLUS3resfail(struct xdr_stream *xdr, struct READDIRPLUS3resfail *ptr)
+{
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->dir_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_READDIRPLUS3res(struct xdr_stream *xdr, struct READDIRPLUS3res *ptr)
+{
+ if (!xdrgen_decode_nfsstat3(xdr, &ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_decode_READDIRPLUS3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_decode_READDIRPLUS3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_FSSTAT3args(struct xdr_stream *xdr, struct FSSTAT3args *ptr)
+{
+ if (!xdrgen_decode_nfs_fh3(xdr, &ptr->fsroot))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_FSSTAT3resok(struct xdr_stream *xdr, struct FSSTAT3resok *ptr)
+{
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->obj_attributes))
+ return false;
+ if (!xdrgen_decode_size3(xdr, &ptr->tbytes))
+ return false;
+ if (!xdrgen_decode_size3(xdr, &ptr->fbytes))
+ return false;
+ if (!xdrgen_decode_size3(xdr, &ptr->abytes))
+ return false;
+ if (!xdrgen_decode_size3(xdr, &ptr->tfiles))
+ return false;
+ if (!xdrgen_decode_size3(xdr, &ptr->ffiles))
+ return false;
+ if (!xdrgen_decode_size3(xdr, &ptr->afiles))
+ return false;
+ if (!xdrgen_decode_uint32(xdr, &ptr->invarsec))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_FSSTAT3resfail(struct xdr_stream *xdr, struct FSSTAT3resfail *ptr)
+{
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->obj_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_FSSTAT3res(struct xdr_stream *xdr, struct FSSTAT3res *ptr)
+{
+ if (!xdrgen_decode_nfsstat3(xdr, &ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_decode_FSSTAT3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_decode_FSSTAT3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_FSINFO3args(struct xdr_stream *xdr, struct FSINFO3args *ptr)
+{
+ if (!xdrgen_decode_nfs_fh3(xdr, &ptr->fsroot))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_FSINFO3resok(struct xdr_stream *xdr, struct FSINFO3resok *ptr)
+{
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->obj_attributes))
+ return false;
+ if (!xdrgen_decode_uint32(xdr, &ptr->rtmax))
+ return false;
+ if (!xdrgen_decode_uint32(xdr, &ptr->rtpref))
+ return false;
+ if (!xdrgen_decode_uint32(xdr, &ptr->rtmult))
+ return false;
+ if (!xdrgen_decode_uint32(xdr, &ptr->wtmax))
+ return false;
+ if (!xdrgen_decode_uint32(xdr, &ptr->wtpref))
+ return false;
+ if (!xdrgen_decode_uint32(xdr, &ptr->wtmult))
+ return false;
+ if (!xdrgen_decode_uint32(xdr, &ptr->dtpref))
+ return false;
+ if (!xdrgen_decode_size3(xdr, &ptr->maxfilesize))
+ return false;
+ if (!xdrgen_decode_nfstime3(xdr, &ptr->time_delta))
+ return false;
+ if (!xdrgen_decode_uint32(xdr, &ptr->properties))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_FSINFO3resfail(struct xdr_stream *xdr, struct FSINFO3resfail *ptr)
+{
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->obj_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_FSINFO3res(struct xdr_stream *xdr, struct FSINFO3res *ptr)
+{
+ if (!xdrgen_decode_nfsstat3(xdr, &ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_decode_FSINFO3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_decode_FSINFO3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_PATHCONF3args(struct xdr_stream *xdr, struct PATHCONF3args *ptr)
+{
+ if (!xdrgen_decode_nfs_fh3(xdr, &ptr->object))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_PATHCONF3resok(struct xdr_stream *xdr, struct PATHCONF3resok *ptr)
+{
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->obj_attributes))
+ return false;
+ if (!xdrgen_decode_uint32(xdr, &ptr->linkmax))
+ return false;
+ if (!xdrgen_decode_uint32(xdr, &ptr->name_max))
+ return false;
+ if (!xdrgen_decode_bool(xdr, &ptr->no_trunc))
+ return false;
+ if (!xdrgen_decode_bool(xdr, &ptr->chown_restricted))
+ return false;
+ if (!xdrgen_decode_bool(xdr, &ptr->case_insensitive))
+ return false;
+ if (!xdrgen_decode_bool(xdr, &ptr->case_preserving))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_PATHCONF3resfail(struct xdr_stream *xdr, struct PATHCONF3resfail *ptr)
+{
+ if (!xdrgen_decode_post_op_attr(xdr, &ptr->obj_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_PATHCONF3res(struct xdr_stream *xdr, struct PATHCONF3res *ptr)
+{
+ if (!xdrgen_decode_nfsstat3(xdr, &ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_decode_PATHCONF3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_decode_PATHCONF3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_COMMIT3args(struct xdr_stream *xdr, struct COMMIT3args *ptr)
+{
+ if (!xdrgen_decode_nfs_fh3(xdr, &ptr->file))
+ return false;
+ if (!xdrgen_decode_offset3(xdr, &ptr->offset))
+ return false;
+ if (!xdrgen_decode_count3(xdr, &ptr->count))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_COMMIT3resok(struct xdr_stream *xdr, struct COMMIT3resok *ptr)
+{
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->file_wcc))
+ return false;
+ if (!xdrgen_decode_writeverf3(xdr, &ptr->verf))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_COMMIT3resfail(struct xdr_stream *xdr, struct COMMIT3resfail *ptr)
+{
+ if (!xdrgen_decode_wcc_data(xdr, &ptr->file_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_decode_COMMIT3res(struct xdr_stream *xdr, struct COMMIT3res *ptr)
+{
+ if (!xdrgen_decode_nfsstat3(xdr, &ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_decode_COMMIT3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_decode_COMMIT3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+/**
+ * nfs_svc_decode_GETATTR3args - Decode a GETATTR3args argument
+ * @rqstp: RPC transaction context
+ * @xdr: source XDR data stream
+ *
+ * Return values:
+ * %true: procedure arguments decoded successfully
+ * %false: decode failed
+ */
+bool nfs_svc_decode_GETATTR3args(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct GETATTR3args *argp = rqstp->rq_argp;
+
+ return xdrgen_decode_GETATTR3args(xdr, argp);
+}
+
+/**
+ * nfs_svc_decode_SETATTR3args - Decode a SETATTR3args argument
+ * @rqstp: RPC transaction context
+ * @xdr: source XDR data stream
+ *
+ * Return values:
+ * %true: procedure arguments decoded successfully
+ * %false: decode failed
+ */
+bool nfs_svc_decode_SETATTR3args(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct SETATTR3args *argp = rqstp->rq_argp;
+
+ return xdrgen_decode_SETATTR3args(xdr, argp);
+}
+
+/**
+ * nfs_svc_decode_LOOKUP3args - Decode a LOOKUP3args argument
+ * @rqstp: RPC transaction context
+ * @xdr: source XDR data stream
+ *
+ * Return values:
+ * %true: procedure arguments decoded successfully
+ * %false: decode failed
+ */
+bool nfs_svc_decode_LOOKUP3args(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct LOOKUP3args *argp = rqstp->rq_argp;
+
+ return xdrgen_decode_LOOKUP3args(xdr, argp);
+}
+
+/**
+ * nfs_svc_decode_ACCESS3args - Decode a ACCESS3args argument
+ * @rqstp: RPC transaction context
+ * @xdr: source XDR data stream
+ *
+ * Return values:
+ * %true: procedure arguments decoded successfully
+ * %false: decode failed
+ */
+bool nfs_svc_decode_ACCESS3args(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct ACCESS3args *argp = rqstp->rq_argp;
+
+ return xdrgen_decode_ACCESS3args(xdr, argp);
+}
+
+/**
+ * nfs_svc_decode_READLINK3args - Decode a READLINK3args argument
+ * @rqstp: RPC transaction context
+ * @xdr: source XDR data stream
+ *
+ * Return values:
+ * %true: procedure arguments decoded successfully
+ * %false: decode failed
+ */
+bool nfs_svc_decode_READLINK3args(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct READLINK3args *argp = rqstp->rq_argp;
+
+ return xdrgen_decode_READLINK3args(xdr, argp);
+}
+
+/**
+ * nfs_svc_decode_READ3args - Decode a READ3args argument
+ * @rqstp: RPC transaction context
+ * @xdr: source XDR data stream
+ *
+ * Return values:
+ * %true: procedure arguments decoded successfully
+ * %false: decode failed
+ */
+bool nfs_svc_decode_READ3args(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct READ3args *argp = rqstp->rq_argp;
+
+ return xdrgen_decode_READ3args(xdr, argp);
+}
+
+/**
+ * nfs_svc_decode_WRITE3args - Decode a WRITE3args argument
+ * @rqstp: RPC transaction context
+ * @xdr: source XDR data stream
+ *
+ * Return values:
+ * %true: procedure arguments decoded successfully
+ * %false: decode failed
+ */
+bool nfs_svc_decode_WRITE3args(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct WRITE3args *argp = rqstp->rq_argp;
+
+ return xdrgen_decode_WRITE3args(xdr, argp);
+}
+
+/**
+ * nfs_svc_decode_CREATE3args - Decode a CREATE3args argument
+ * @rqstp: RPC transaction context
+ * @xdr: source XDR data stream
+ *
+ * Return values:
+ * %true: procedure arguments decoded successfully
+ * %false: decode failed
+ */
+bool nfs_svc_decode_CREATE3args(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct CREATE3args *argp = rqstp->rq_argp;
+
+ return xdrgen_decode_CREATE3args(xdr, argp);
+}
+
+/**
+ * nfs_svc_decode_MKDIR3args - Decode a MKDIR3args argument
+ * @rqstp: RPC transaction context
+ * @xdr: source XDR data stream
+ *
+ * Return values:
+ * %true: procedure arguments decoded successfully
+ * %false: decode failed
+ */
+bool nfs_svc_decode_MKDIR3args(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct MKDIR3args *argp = rqstp->rq_argp;
+
+ return xdrgen_decode_MKDIR3args(xdr, argp);
+}
+
+/**
+ * nfs_svc_decode_SYMLINK3args - Decode a SYMLINK3args argument
+ * @rqstp: RPC transaction context
+ * @xdr: source XDR data stream
+ *
+ * Return values:
+ * %true: procedure arguments decoded successfully
+ * %false: decode failed
+ */
+bool nfs_svc_decode_SYMLINK3args(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct SYMLINK3args *argp = rqstp->rq_argp;
+
+ return xdrgen_decode_SYMLINK3args(xdr, argp);
+}
+
+/**
+ * nfs_svc_decode_MKNOD3args - Decode a MKNOD3args argument
+ * @rqstp: RPC transaction context
+ * @xdr: source XDR data stream
+ *
+ * Return values:
+ * %true: procedure arguments decoded successfully
+ * %false: decode failed
+ */
+bool nfs_svc_decode_MKNOD3args(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct MKNOD3args *argp = rqstp->rq_argp;
+
+ return xdrgen_decode_MKNOD3args(xdr, argp);
+}
+
+/**
+ * nfs_svc_decode_REMOVE3args - Decode a REMOVE3args argument
+ * @rqstp: RPC transaction context
+ * @xdr: source XDR data stream
+ *
+ * Return values:
+ * %true: procedure arguments decoded successfully
+ * %false: decode failed
+ */
+bool nfs_svc_decode_REMOVE3args(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct REMOVE3args *argp = rqstp->rq_argp;
+
+ return xdrgen_decode_REMOVE3args(xdr, argp);
+}
+
+/**
+ * nfs_svc_decode_RMDIR3args - Decode a RMDIR3args argument
+ * @rqstp: RPC transaction context
+ * @xdr: source XDR data stream
+ *
+ * Return values:
+ * %true: procedure arguments decoded successfully
+ * %false: decode failed
+ */
+bool nfs_svc_decode_RMDIR3args(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct RMDIR3args *argp = rqstp->rq_argp;
+
+ return xdrgen_decode_RMDIR3args(xdr, argp);
+}
+
+/**
+ * nfs_svc_decode_RENAME3args - Decode a RENAME3args argument
+ * @rqstp: RPC transaction context
+ * @xdr: source XDR data stream
+ *
+ * Return values:
+ * %true: procedure arguments decoded successfully
+ * %false: decode failed
+ */
+bool nfs_svc_decode_RENAME3args(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct RENAME3args *argp = rqstp->rq_argp;
+
+ return xdrgen_decode_RENAME3args(xdr, argp);
+}
+
+/**
+ * nfs_svc_decode_LINK3args - Decode a LINK3args argument
+ * @rqstp: RPC transaction context
+ * @xdr: source XDR data stream
+ *
+ * Return values:
+ * %true: procedure arguments decoded successfully
+ * %false: decode failed
+ */
+bool nfs_svc_decode_LINK3args(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct LINK3args *argp = rqstp->rq_argp;
+
+ return xdrgen_decode_LINK3args(xdr, argp);
+}
+
+/**
+ * nfs_svc_decode_READDIR3args - Decode a READDIR3args argument
+ * @rqstp: RPC transaction context
+ * @xdr: source XDR data stream
+ *
+ * Return values:
+ * %true: procedure arguments decoded successfully
+ * %false: decode failed
+ */
+bool nfs_svc_decode_READDIR3args(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct READDIR3args *argp = rqstp->rq_argp;
+
+ return xdrgen_decode_READDIR3args(xdr, argp);
+}
+
+/**
+ * nfs_svc_decode_READDIRPLUS3args - Decode a READDIRPLUS3args argument
+ * @rqstp: RPC transaction context
+ * @xdr: source XDR data stream
+ *
+ * Return values:
+ * %true: procedure arguments decoded successfully
+ * %false: decode failed
+ */
+bool nfs_svc_decode_READDIRPLUS3args(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct READDIRPLUS3args *argp = rqstp->rq_argp;
+
+ return xdrgen_decode_READDIRPLUS3args(xdr, argp);
+}
+
+/**
+ * nfs_svc_decode_FSSTAT3args - Decode a FSSTAT3args argument
+ * @rqstp: RPC transaction context
+ * @xdr: source XDR data stream
+ *
+ * Return values:
+ * %true: procedure arguments decoded successfully
+ * %false: decode failed
+ */
+bool nfs_svc_decode_FSSTAT3args(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct FSSTAT3args *argp = rqstp->rq_argp;
+
+ return xdrgen_decode_FSSTAT3args(xdr, argp);
+}
+
+/**
+ * nfs_svc_decode_FSINFO3args - Decode a FSINFO3args argument
+ * @rqstp: RPC transaction context
+ * @xdr: source XDR data stream
+ *
+ * Return values:
+ * %true: procedure arguments decoded successfully
+ * %false: decode failed
+ */
+bool nfs_svc_decode_FSINFO3args(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct FSINFO3args *argp = rqstp->rq_argp;
+
+ return xdrgen_decode_FSINFO3args(xdr, argp);
+}
+
+/**
+ * nfs_svc_decode_PATHCONF3args - Decode a PATHCONF3args argument
+ * @rqstp: RPC transaction context
+ * @xdr: source XDR data stream
+ *
+ * Return values:
+ * %true: procedure arguments decoded successfully
+ * %false: decode failed
+ */
+bool nfs_svc_decode_PATHCONF3args(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct PATHCONF3args *argp = rqstp->rq_argp;
+
+ return xdrgen_decode_PATHCONF3args(xdr, argp);
+}
+
+/**
+ * nfs_svc_decode_COMMIT3args - Decode a COMMIT3args argument
+ * @rqstp: RPC transaction context
+ * @xdr: source XDR data stream
+ *
+ * Return values:
+ * %true: procedure arguments decoded successfully
+ * %false: decode failed
+ */
+bool nfs_svc_decode_COMMIT3args(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct COMMIT3args *argp = rqstp->rq_argp;
+
+ return xdrgen_decode_COMMIT3args(xdr, argp);
+}
+
+static bool __maybe_unused
+xdrgen_encode_uint64(struct xdr_stream *xdr, const uint64 value)
+{
+ return xdrgen_encode_unsigned_hyper(xdr, value);
+}
+
+static bool __maybe_unused
+xdrgen_encode_int64(struct xdr_stream *xdr, const int64 value)
+{
+ return xdrgen_encode_hyper(xdr, value);
+}
+
+static bool __maybe_unused
+xdrgen_encode_uint32(struct xdr_stream *xdr, const uint32 value)
+{
+ return xdrgen_encode_unsigned_long(xdr, value);
+}
+
+static bool __maybe_unused
+xdrgen_encode_int32(struct xdr_stream *xdr, const int32 value)
+{
+ return xdrgen_encode_long(xdr, value);
+}
+
+static bool __maybe_unused
+xdrgen_encode_filename3(struct xdr_stream *xdr, const filename3 value)
+{
+ return xdr_stream_encode_opaque(xdr, value.data, value.len) >= 0;
+}
+
+static bool __maybe_unused
+xdrgen_encode_nfspath3(struct xdr_stream *xdr, const nfspath3 value)
+{
+ return xdr_stream_encode_opaque(xdr, value.data, value.len) >= 0;
+}
+
+static bool __maybe_unused
+xdrgen_encode_fileid3(struct xdr_stream *xdr, const fileid3 value)
+{
+ return xdrgen_encode_uint64(xdr, value);
+}
+
+static bool __maybe_unused
+xdrgen_encode_cookie3(struct xdr_stream *xdr, const cookie3 value)
+{
+ return xdrgen_encode_uint64(xdr, value);
+}
+
+static bool __maybe_unused
+xdrgen_encode_cookieverf3(struct xdr_stream *xdr, const cookieverf3 value)
+{
+ return xdr_stream_encode_opaque_fixed(xdr, value, NFS3_COOKIEVERFSIZE) >= 0;
+}
+
+static bool __maybe_unused
+xdrgen_encode_createverf3(struct xdr_stream *xdr, const createverf3 value)
+{
+ return xdr_stream_encode_opaque_fixed(xdr, value, NFS3_CREATEVERFSIZE) >= 0;
+}
+
+static bool __maybe_unused
+xdrgen_encode_writeverf3(struct xdr_stream *xdr, const writeverf3 value)
+{
+ return xdr_stream_encode_opaque_fixed(xdr, value, NFS3_WRITEVERFSIZE) >= 0;
+}
+
+static bool __maybe_unused
+xdrgen_encode_uid3(struct xdr_stream *xdr, const uid3 value)
+{
+ return xdrgen_encode_uint32(xdr, value);
+}
+
+static bool __maybe_unused
+xdrgen_encode_gid3(struct xdr_stream *xdr, const gid3 value)
+{
+ return xdrgen_encode_uint32(xdr, value);
+}
+
+static bool __maybe_unused
+xdrgen_encode_size3(struct xdr_stream *xdr, const size3 value)
+{
+ return xdrgen_encode_uint64(xdr, value);
+}
+
+static bool __maybe_unused
+xdrgen_encode_offset3(struct xdr_stream *xdr, const offset3 value)
+{
+ return xdrgen_encode_uint64(xdr, value);
+}
+
+static bool __maybe_unused
+xdrgen_encode_mode3(struct xdr_stream *xdr, const mode3 value)
+{
+ return xdrgen_encode_uint32(xdr, value);
+}
+
+static bool __maybe_unused
+xdrgen_encode_count3(struct xdr_stream *xdr, const count3 value)
+{
+ return xdrgen_encode_uint32(xdr, value);
+}
+
+static bool __maybe_unused
+xdrgen_encode_nfsstat3(struct xdr_stream *xdr, nfsstat3 value)
+{
+ return xdr_stream_encode_u32(xdr, value) == XDR_UNIT;
+}
+
+static bool __maybe_unused
+xdrgen_encode_ftype3(struct xdr_stream *xdr, ftype3 value)
+{
+ return xdr_stream_encode_u32(xdr, value) == XDR_UNIT;
+}
+
+static bool __maybe_unused
+xdrgen_encode_specdata3(struct xdr_stream *xdr, const struct specdata3 *value)
+{
+ if (!xdrgen_encode_uint32(xdr, value->specdata1))
+ return false;
+ if (!xdrgen_encode_uint32(xdr, value->specdata2))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_nfs_fh3(struct xdr_stream *xdr, const struct nfs_fh3 *value)
+{
+ if (value->data.len > NFS3_FHSIZE)
+ return false;
+ if (xdr_stream_encode_opaque(xdr, value->data.data, value->data.len) < 0)
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_nfstime3(struct xdr_stream *xdr, const struct nfstime3 *value)
+{
+ if (!xdrgen_encode_uint32(xdr, value->seconds))
+ return false;
+ if (!xdrgen_encode_uint32(xdr, value->nseconds))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_fattr3(struct xdr_stream *xdr, const struct fattr3 *value)
+{
+ if (!xdrgen_encode_ftype3(xdr, value->type))
+ return false;
+ if (!xdrgen_encode_mode3(xdr, value->mode))
+ return false;
+ if (!xdrgen_encode_uint32(xdr, value->nlink))
+ return false;
+ if (!xdrgen_encode_uid3(xdr, value->uid))
+ return false;
+ if (!xdrgen_encode_gid3(xdr, value->gid))
+ return false;
+ if (!xdrgen_encode_size3(xdr, value->size))
+ return false;
+ if (!xdrgen_encode_size3(xdr, value->used))
+ return false;
+ if (!xdrgen_encode_specdata3(xdr, &value->rdev))
+ return false;
+ if (!xdrgen_encode_uint64(xdr, value->fsid))
+ return false;
+ if (!xdrgen_encode_fileid3(xdr, value->fileid))
+ return false;
+ if (!xdrgen_encode_nfstime3(xdr, &value->atime))
+ return false;
+ if (!xdrgen_encode_nfstime3(xdr, &value->mtime))
+ return false;
+ if (!xdrgen_encode_nfstime3(xdr, &value->ctime))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_post_op_attr(struct xdr_stream *xdr, const struct post_op_attr *ptr)
+{
+ if (!xdrgen_encode_bool(xdr, ptr->attributes_follow))
+ return false;
+ if (ptr->attributes_follow) {
+ if (!xdrgen_encode_fattr3(xdr, &ptr->u.attributes))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_wcc_attr(struct xdr_stream *xdr, const struct wcc_attr *value)
+{
+ if (!xdrgen_encode_size3(xdr, value->size))
+ return false;
+ if (!xdrgen_encode_nfstime3(xdr, &value->mtime))
+ return false;
+ if (!xdrgen_encode_nfstime3(xdr, &value->ctime))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_pre_op_attr(struct xdr_stream *xdr, const struct pre_op_attr *ptr)
+{
+ if (!xdrgen_encode_bool(xdr, ptr->attributes_follow))
+ return false;
+ if (ptr->attributes_follow) {
+ if (!xdrgen_encode_wcc_attr(xdr, &ptr->u.attributes))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_wcc_data(struct xdr_stream *xdr, const struct wcc_data *value)
+{
+ if (!xdrgen_encode_pre_op_attr(xdr, &value->before))
+ return false;
+ if (!xdrgen_encode_post_op_attr(xdr, &value->after))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_post_op_fh3(struct xdr_stream *xdr, const struct post_op_fh3 *ptr)
+{
+ if (!xdrgen_encode_bool(xdr, ptr->handle_follows))
+ return false;
+ if (ptr->handle_follows) {
+ if (!xdrgen_encode_nfs_fh3(xdr, &ptr->u.handle))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_time_how(struct xdr_stream *xdr, time_how value)
+{
+ return xdr_stream_encode_u32(xdr, value) == XDR_UNIT;
+}
+
+static bool __maybe_unused
+xdrgen_encode_set_mode3(struct xdr_stream *xdr, const struct set_mode3 *ptr)
+{
+ if (!xdrgen_encode_bool(xdr, ptr->set_it))
+ return false;
+ if (ptr->set_it) {
+ if (!xdrgen_encode_mode3(xdr, ptr->u.mode))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_set_uid3(struct xdr_stream *xdr, const struct set_uid3 *ptr)
+{
+ if (!xdrgen_encode_bool(xdr, ptr->set_it))
+ return false;
+ if (ptr->set_it) {
+ if (!xdrgen_encode_uid3(xdr, ptr->u.uid))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_set_gid3(struct xdr_stream *xdr, const struct set_gid3 *ptr)
+{
+ if (!xdrgen_encode_bool(xdr, ptr->set_it))
+ return false;
+ if (ptr->set_it) {
+ if (!xdrgen_encode_gid3(xdr, ptr->u.gid))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_set_size3(struct xdr_stream *xdr, const struct set_size3 *ptr)
+{
+ if (!xdrgen_encode_bool(xdr, ptr->set_it))
+ return false;
+ if (ptr->set_it) {
+ if (!xdrgen_encode_size3(xdr, ptr->u.size))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_set_atime(struct xdr_stream *xdr, const struct set_atime *ptr)
+{
+ if (!xdrgen_encode_time_how(xdr, ptr->set_it))
+ return false;
+ switch (ptr->set_it) {
+ case SET_TO_CLIENT_TIME:
+ if (!xdrgen_encode_nfstime3(xdr, &ptr->u.atime))
+ return false;
+ break;
+ default:
+ break;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_set_mtime(struct xdr_stream *xdr, const struct set_mtime *ptr)
+{
+ if (!xdrgen_encode_time_how(xdr, ptr->set_it))
+ return false;
+ switch (ptr->set_it) {
+ case SET_TO_CLIENT_TIME:
+ if (!xdrgen_encode_nfstime3(xdr, &ptr->u.mtime))
+ return false;
+ break;
+ default:
+ break;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_sattr3(struct xdr_stream *xdr, const struct sattr3 *value)
+{
+ if (!xdrgen_encode_set_mode3(xdr, &value->mode))
+ return false;
+ if (!xdrgen_encode_set_uid3(xdr, &value->uid))
+ return false;
+ if (!xdrgen_encode_set_gid3(xdr, &value->gid))
+ return false;
+ if (!xdrgen_encode_set_size3(xdr, &value->size))
+ return false;
+ if (!xdrgen_encode_set_atime(xdr, &value->atime))
+ return false;
+ if (!xdrgen_encode_set_mtime(xdr, &value->mtime))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_diropargs3(struct xdr_stream *xdr, const struct diropargs3 *value)
+{
+ if (!xdrgen_encode_nfs_fh3(xdr, &value->dir))
+ return false;
+ if (!xdrgen_encode_filename3(xdr, value->name))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_GETATTR3args(struct xdr_stream *xdr, const struct GETATTR3args *value)
+{
+ if (!xdrgen_encode_nfs_fh3(xdr, &value->object))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_GETATTR3resok(struct xdr_stream *xdr, const struct GETATTR3resok *value)
+{
+ if (!xdrgen_encode_fattr3(xdr, &value->obj_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_GETATTR3res(struct xdr_stream *xdr, const struct GETATTR3res *ptr)
+{
+ if (!xdrgen_encode_nfsstat3(xdr, ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_encode_GETATTR3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ break;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_sattrguard3(struct xdr_stream *xdr, const struct sattrguard3 *ptr)
+{
+ if (!xdrgen_encode_bool(xdr, ptr->check))
+ return false;
+ if (ptr->check) {
+ if (!xdrgen_encode_nfstime3(xdr, &ptr->u.obj_ctime))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_SETATTR3args(struct xdr_stream *xdr, const struct SETATTR3args *value)
+{
+ if (!xdrgen_encode_nfs_fh3(xdr, &value->object))
+ return false;
+ if (!xdrgen_encode_sattr3(xdr, &value->new_attributes))
+ return false;
+ if (!xdrgen_encode_sattrguard3(xdr, &value->guard))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_SETATTR3resok(struct xdr_stream *xdr, const struct SETATTR3resok *value)
+{
+ if (!xdrgen_encode_wcc_data(xdr, &value->obj_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_SETATTR3resfail(struct xdr_stream *xdr, const struct SETATTR3resfail *value)
+{
+ if (!xdrgen_encode_wcc_data(xdr, &value->obj_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_SETATTR3res(struct xdr_stream *xdr, const struct SETATTR3res *ptr)
+{
+ if (!xdrgen_encode_nfsstat3(xdr, ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_encode_SETATTR3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_encode_SETATTR3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_LOOKUP3args(struct xdr_stream *xdr, const struct LOOKUP3args *value)
+{
+ if (!xdrgen_encode_diropargs3(xdr, &value->what))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_LOOKUP3resok(struct xdr_stream *xdr, const struct LOOKUP3resok *value)
+{
+ if (!xdrgen_encode_nfs_fh3(xdr, &value->object))
+ return false;
+ if (!xdrgen_encode_post_op_attr(xdr, &value->obj_attributes))
+ return false;
+ if (!xdrgen_encode_post_op_attr(xdr, &value->dir_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_LOOKUP3resfail(struct xdr_stream *xdr, const struct LOOKUP3resfail *value)
+{
+ if (!xdrgen_encode_post_op_attr(xdr, &value->dir_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_LOOKUP3res(struct xdr_stream *xdr, const struct LOOKUP3res *ptr)
+{
+ if (!xdrgen_encode_nfsstat3(xdr, ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_encode_LOOKUP3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_encode_LOOKUP3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_ACCESS3args(struct xdr_stream *xdr, const struct ACCESS3args *value)
+{
+ if (!xdrgen_encode_nfs_fh3(xdr, &value->object))
+ return false;
+ if (!xdrgen_encode_uint32(xdr, value->access))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_ACCESS3resok(struct xdr_stream *xdr, const struct ACCESS3resok *value)
+{
+ if (!xdrgen_encode_post_op_attr(xdr, &value->obj_attributes))
+ return false;
+ if (!xdrgen_encode_uint32(xdr, value->access))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_ACCESS3resfail(struct xdr_stream *xdr, const struct ACCESS3resfail *value)
+{
+ if (!xdrgen_encode_post_op_attr(xdr, &value->obj_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_ACCESS3res(struct xdr_stream *xdr, const struct ACCESS3res *ptr)
+{
+ if (!xdrgen_encode_nfsstat3(xdr, ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_encode_ACCESS3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_encode_ACCESS3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_READLINK3args(struct xdr_stream *xdr, const struct READLINK3args *value)
+{
+ if (!xdrgen_encode_nfs_fh3(xdr, &value->symlink))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_READLINK3resok(struct xdr_stream *xdr, const struct READLINK3resok *value)
+{
+ if (!xdrgen_encode_post_op_attr(xdr, &value->symlink_attributes))
+ return false;
+ if (!xdrgen_encode_nfspath3(xdr, value->data))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_READLINK3resfail(struct xdr_stream *xdr, const struct READLINK3resfail *value)
+{
+ if (!xdrgen_encode_post_op_attr(xdr, &value->symlink_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_READLINK3res(struct xdr_stream *xdr, const struct READLINK3res *ptr)
+{
+ if (!xdrgen_encode_nfsstat3(xdr, ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_encode_READLINK3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_encode_READLINK3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_READ3args(struct xdr_stream *xdr, const struct READ3args *value)
+{
+ if (!xdrgen_encode_nfs_fh3(xdr, &value->file))
+ return false;
+ if (!xdrgen_encode_offset3(xdr, value->offset))
+ return false;
+ if (!xdrgen_encode_count3(xdr, value->count))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_READ3resok(struct xdr_stream *xdr, const struct READ3resok *value)
+{
+ if (!xdrgen_encode_post_op_attr(xdr, &value->file_attributes))
+ return false;
+ if (!xdrgen_encode_count3(xdr, value->count))
+ return false;
+ if (!xdrgen_encode_bool(xdr, value->eof))
+ return false;
+ if (xdr_stream_encode_opaque(xdr, value->data.data, value->data.len) < 0)
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_READ3resfail(struct xdr_stream *xdr, const struct READ3resfail *value)
+{
+ if (!xdrgen_encode_post_op_attr(xdr, &value->file_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_READ3res(struct xdr_stream *xdr, const struct READ3res *ptr)
+{
+ if (!xdrgen_encode_nfsstat3(xdr, ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_encode_READ3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_encode_READ3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_stable_how(struct xdr_stream *xdr, stable_how value)
+{
+ return xdr_stream_encode_u32(xdr, value) == XDR_UNIT;
+}
+
+static bool __maybe_unused
+xdrgen_encode_WRITE3args(struct xdr_stream *xdr, const struct WRITE3args *value)
+{
+ if (!xdrgen_encode_nfs_fh3(xdr, &value->file))
+ return false;
+ if (!xdrgen_encode_offset3(xdr, value->offset))
+ return false;
+ if (!xdrgen_encode_count3(xdr, value->count))
+ return false;
+ if (!xdrgen_encode_stable_how(xdr, value->stable))
+ return false;
+ if (xdr_stream_encode_opaque(xdr, value->data.data, value->data.len) < 0)
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_WRITE3resok(struct xdr_stream *xdr, const struct WRITE3resok *value)
+{
+ if (!xdrgen_encode_wcc_data(xdr, &value->file_wcc))
+ return false;
+ if (!xdrgen_encode_count3(xdr, value->count))
+ return false;
+ if (!xdrgen_encode_stable_how(xdr, value->committed))
+ return false;
+ if (!xdrgen_encode_writeverf3(xdr, value->verf))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_WRITE3resfail(struct xdr_stream *xdr, const struct WRITE3resfail *value)
+{
+ if (!xdrgen_encode_wcc_data(xdr, &value->file_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_WRITE3res(struct xdr_stream *xdr, const struct WRITE3res *ptr)
+{
+ if (!xdrgen_encode_nfsstat3(xdr, ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_encode_WRITE3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_encode_WRITE3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_createmode3(struct xdr_stream *xdr, createmode3 value)
+{
+ return xdr_stream_encode_u32(xdr, value) == XDR_UNIT;
+}
+
+static bool __maybe_unused
+xdrgen_encode_createhow3(struct xdr_stream *xdr, const struct createhow3 *ptr)
+{
+ if (!xdrgen_encode_createmode3(xdr, ptr->mode))
+ return false;
+ switch (ptr->mode) {
+ case UNCHECKED:
+ case GUARDED:
+ if (!xdrgen_encode_sattr3(xdr, &ptr->u.obj_attributes))
+ return false;
+ break;
+ case EXCLUSIVE:
+ if (!xdrgen_encode_createverf3(xdr, ptr->u.verf))
+ return false;
+ break;
+ default:
+ break;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_CREATE3args(struct xdr_stream *xdr, const struct CREATE3args *value)
+{
+ if (!xdrgen_encode_diropargs3(xdr, &value->where))
+ return false;
+ if (!xdrgen_encode_createhow3(xdr, &value->how))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_CREATE3resok(struct xdr_stream *xdr, const struct CREATE3resok *value)
+{
+ if (!xdrgen_encode_post_op_fh3(xdr, &value->obj))
+ return false;
+ if (!xdrgen_encode_post_op_attr(xdr, &value->obj_attributes))
+ return false;
+ if (!xdrgen_encode_wcc_data(xdr, &value->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_CREATE3resfail(struct xdr_stream *xdr, const struct CREATE3resfail *value)
+{
+ if (!xdrgen_encode_wcc_data(xdr, &value->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_CREATE3res(struct xdr_stream *xdr, const struct CREATE3res *ptr)
+{
+ if (!xdrgen_encode_nfsstat3(xdr, ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_encode_CREATE3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_encode_CREATE3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_MKDIR3args(struct xdr_stream *xdr, const struct MKDIR3args *value)
+{
+ if (!xdrgen_encode_diropargs3(xdr, &value->where))
+ return false;
+ if (!xdrgen_encode_sattr3(xdr, &value->attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_MKDIR3resok(struct xdr_stream *xdr, const struct MKDIR3resok *value)
+{
+ if (!xdrgen_encode_post_op_fh3(xdr, &value->obj))
+ return false;
+ if (!xdrgen_encode_post_op_attr(xdr, &value->obj_attributes))
+ return false;
+ if (!xdrgen_encode_wcc_data(xdr, &value->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_MKDIR3resfail(struct xdr_stream *xdr, const struct MKDIR3resfail *value)
+{
+ if (!xdrgen_encode_wcc_data(xdr, &value->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_MKDIR3res(struct xdr_stream *xdr, const struct MKDIR3res *ptr)
+{
+ if (!xdrgen_encode_nfsstat3(xdr, ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_encode_MKDIR3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_encode_MKDIR3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_symlinkdata3(struct xdr_stream *xdr, const struct symlinkdata3 *value)
+{
+ if (!xdrgen_encode_sattr3(xdr, &value->symlink_attributes))
+ return false;
+ if (!xdrgen_encode_nfspath3(xdr, value->symlink_data))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_SYMLINK3args(struct xdr_stream *xdr, const struct SYMLINK3args *value)
+{
+ if (!xdrgen_encode_diropargs3(xdr, &value->where))
+ return false;
+ if (!xdrgen_encode_symlinkdata3(xdr, &value->symlink))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_SYMLINK3resok(struct xdr_stream *xdr, const struct SYMLINK3resok *value)
+{
+ if (!xdrgen_encode_post_op_fh3(xdr, &value->obj))
+ return false;
+ if (!xdrgen_encode_post_op_attr(xdr, &value->obj_attributes))
+ return false;
+ if (!xdrgen_encode_wcc_data(xdr, &value->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_SYMLINK3resfail(struct xdr_stream *xdr, const struct SYMLINK3resfail *value)
+{
+ if (!xdrgen_encode_wcc_data(xdr, &value->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_SYMLINK3res(struct xdr_stream *xdr, const struct SYMLINK3res *ptr)
+{
+ if (!xdrgen_encode_nfsstat3(xdr, ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_encode_SYMLINK3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_encode_SYMLINK3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_devicedata3(struct xdr_stream *xdr, const struct devicedata3 *value)
+{
+ if (!xdrgen_encode_sattr3(xdr, &value->dev_attributes))
+ return false;
+ if (!xdrgen_encode_specdata3(xdr, &value->spec))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_mknoddata3(struct xdr_stream *xdr, const struct mknoddata3 *ptr)
+{
+ if (!xdrgen_encode_ftype3(xdr, ptr->type))
+ return false;
+ switch (ptr->type) {
+ case NF3CHR:
+ case NF3BLK:
+ if (!xdrgen_encode_devicedata3(xdr, &ptr->u.device))
+ return false;
+ break;
+ case NF3SOCK:
+ case NF3FIFO:
+ if (!xdrgen_encode_sattr3(xdr, &ptr->u.pipe_attributes))
+ return false;
+ break;
+ default:
+ break;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_MKNOD3args(struct xdr_stream *xdr, const struct MKNOD3args *value)
+{
+ if (!xdrgen_encode_diropargs3(xdr, &value->where))
+ return false;
+ if (!xdrgen_encode_mknoddata3(xdr, &value->what))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_MKNOD3resok(struct xdr_stream *xdr, const struct MKNOD3resok *value)
+{
+ if (!xdrgen_encode_post_op_fh3(xdr, &value->obj))
+ return false;
+ if (!xdrgen_encode_post_op_attr(xdr, &value->obj_attributes))
+ return false;
+ if (!xdrgen_encode_wcc_data(xdr, &value->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_MKNOD3resfail(struct xdr_stream *xdr, const struct MKNOD3resfail *value)
+{
+ if (!xdrgen_encode_wcc_data(xdr, &value->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_MKNOD3res(struct xdr_stream *xdr, const struct MKNOD3res *ptr)
+{
+ if (!xdrgen_encode_nfsstat3(xdr, ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_encode_MKNOD3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_encode_MKNOD3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_REMOVE3args(struct xdr_stream *xdr, const struct REMOVE3args *value)
+{
+ if (!xdrgen_encode_diropargs3(xdr, &value->object))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_REMOVE3resok(struct xdr_stream *xdr, const struct REMOVE3resok *value)
+{
+ if (!xdrgen_encode_wcc_data(xdr, &value->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_REMOVE3resfail(struct xdr_stream *xdr, const struct REMOVE3resfail *value)
+{
+ if (!xdrgen_encode_wcc_data(xdr, &value->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_REMOVE3res(struct xdr_stream *xdr, const struct REMOVE3res *ptr)
+{
+ if (!xdrgen_encode_nfsstat3(xdr, ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_encode_REMOVE3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_encode_REMOVE3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_RMDIR3args(struct xdr_stream *xdr, const struct RMDIR3args *value)
+{
+ if (!xdrgen_encode_diropargs3(xdr, &value->object))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_RMDIR3resok(struct xdr_stream *xdr, const struct RMDIR3resok *value)
+{
+ if (!xdrgen_encode_wcc_data(xdr, &value->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_RMDIR3resfail(struct xdr_stream *xdr, const struct RMDIR3resfail *value)
+{
+ if (!xdrgen_encode_wcc_data(xdr, &value->dir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_RMDIR3res(struct xdr_stream *xdr, const struct RMDIR3res *ptr)
+{
+ if (!xdrgen_encode_nfsstat3(xdr, ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_encode_RMDIR3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_encode_RMDIR3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_RENAME3args(struct xdr_stream *xdr, const struct RENAME3args *value)
+{
+ if (!xdrgen_encode_diropargs3(xdr, &value->from))
+ return false;
+ if (!xdrgen_encode_diropargs3(xdr, &value->to))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_RENAME3resok(struct xdr_stream *xdr, const struct RENAME3resok *value)
+{
+ if (!xdrgen_encode_wcc_data(xdr, &value->fromdir_wcc))
+ return false;
+ if (!xdrgen_encode_wcc_data(xdr, &value->todir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_RENAME3resfail(struct xdr_stream *xdr, const struct RENAME3resfail *value)
+{
+ if (!xdrgen_encode_wcc_data(xdr, &value->fromdir_wcc))
+ return false;
+ if (!xdrgen_encode_wcc_data(xdr, &value->todir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_RENAME3res(struct xdr_stream *xdr, const struct RENAME3res *ptr)
+{
+ if (!xdrgen_encode_nfsstat3(xdr, ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_encode_RENAME3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_encode_RENAME3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_LINK3args(struct xdr_stream *xdr, const struct LINK3args *value)
+{
+ if (!xdrgen_encode_nfs_fh3(xdr, &value->file))
+ return false;
+ if (!xdrgen_encode_diropargs3(xdr, &value->link))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_LINK3resok(struct xdr_stream *xdr, const struct LINK3resok *value)
+{
+ if (!xdrgen_encode_post_op_attr(xdr, &value->file_attributes))
+ return false;
+ if (!xdrgen_encode_wcc_data(xdr, &value->linkdir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_LINK3resfail(struct xdr_stream *xdr, const struct LINK3resfail *value)
+{
+ if (!xdrgen_encode_post_op_attr(xdr, &value->file_attributes))
+ return false;
+ if (!xdrgen_encode_wcc_data(xdr, &value->linkdir_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_LINK3res(struct xdr_stream *xdr, const struct LINK3res *ptr)
+{
+ if (!xdrgen_encode_nfsstat3(xdr, ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_encode_LINK3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_encode_LINK3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_READDIR3args(struct xdr_stream *xdr, const struct READDIR3args *value)
+{
+ if (!xdrgen_encode_nfs_fh3(xdr, &value->dir))
+ return false;
+ if (!xdrgen_encode_cookie3(xdr, value->cookie))
+ return false;
+ if (!xdrgen_encode_cookieverf3(xdr, value->cookieverf))
+ return false;
+ if (!xdrgen_encode_count3(xdr, value->count))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_entry3(struct xdr_stream *xdr, const struct entry3 *value)
+{
+ if (!xdrgen_encode_bool(xdr, value != NULL))
+ return false;
+ if (!value)
+ return true;
+
+ if (!xdrgen_encode_fileid3(xdr, value->fileid))
+ return false;
+ if (!xdrgen_encode_filename3(xdr, value->name))
+ return false;
+ if (!xdrgen_encode_cookie3(xdr, value->cookie))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_dirlist3(struct xdr_stream *xdr, const struct dirlist3 *value)
+{
+ if (!xdrgen_encode_entry3(xdr, value->entries))
+ return false;
+ if (!xdrgen_encode_bool(xdr, value->eof))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_READDIR3resok(struct xdr_stream *xdr, const struct READDIR3resok *value)
+{
+ if (!xdrgen_encode_post_op_attr(xdr, &value->dir_attributes))
+ return false;
+ if (!xdrgen_encode_cookieverf3(xdr, value->cookieverf))
+ return false;
+ if (!xdrgen_encode_dirlist3(xdr, &value->reply))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_READDIR3resfail(struct xdr_stream *xdr, const struct READDIR3resfail *value)
+{
+ if (!xdrgen_encode_post_op_attr(xdr, &value->dir_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_READDIR3res(struct xdr_stream *xdr, const struct READDIR3res *ptr)
+{
+ if (!xdrgen_encode_nfsstat3(xdr, ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_encode_READDIR3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_encode_READDIR3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_READDIRPLUS3args(struct xdr_stream *xdr, const struct READDIRPLUS3args *value)
+{
+ if (!xdrgen_encode_nfs_fh3(xdr, &value->dir))
+ return false;
+ if (!xdrgen_encode_cookie3(xdr, value->cookie))
+ return false;
+ if (!xdrgen_encode_cookieverf3(xdr, value->cookieverf))
+ return false;
+ if (!xdrgen_encode_count3(xdr, value->dircount))
+ return false;
+ if (!xdrgen_encode_count3(xdr, value->maxcount))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_entryplus3(struct xdr_stream *xdr, const struct entryplus3 *value)
+{
+ if (!xdrgen_encode_bool(xdr, value != NULL))
+ return false;
+ if (!value)
+ return true;
+
+ if (!xdrgen_encode_fileid3(xdr, value->fileid))
+ return false;
+ if (!xdrgen_encode_filename3(xdr, value->name))
+ return false;
+ if (!xdrgen_encode_cookie3(xdr, value->cookie))
+ return false;
+ if (!xdrgen_encode_post_op_attr(xdr, &value->name_attributes))
+ return false;
+ if (!xdrgen_encode_post_op_fh3(xdr, &value->name_handle))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_dirlistplus3(struct xdr_stream *xdr, const struct dirlistplus3 *value)
+{
+ if (!xdrgen_encode_entryplus3(xdr, value->entries))
+ return false;
+ if (!xdrgen_encode_bool(xdr, value->eof))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_READDIRPLUS3resok(struct xdr_stream *xdr, const struct READDIRPLUS3resok *value)
+{
+ if (!xdrgen_encode_post_op_attr(xdr, &value->dir_attributes))
+ return false;
+ if (!xdrgen_encode_cookieverf3(xdr, value->cookieverf))
+ return false;
+ if (!xdrgen_encode_dirlistplus3(xdr, &value->reply))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_READDIRPLUS3resfail(struct xdr_stream *xdr, const struct READDIRPLUS3resfail *value)
+{
+ if (!xdrgen_encode_post_op_attr(xdr, &value->dir_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_READDIRPLUS3res(struct xdr_stream *xdr, const struct READDIRPLUS3res *ptr)
+{
+ if (!xdrgen_encode_nfsstat3(xdr, ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_encode_READDIRPLUS3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_encode_READDIRPLUS3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_FSSTAT3args(struct xdr_stream *xdr, const struct FSSTAT3args *value)
+{
+ if (!xdrgen_encode_nfs_fh3(xdr, &value->fsroot))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_FSSTAT3resok(struct xdr_stream *xdr, const struct FSSTAT3resok *value)
+{
+ if (!xdrgen_encode_post_op_attr(xdr, &value->obj_attributes))
+ return false;
+ if (!xdrgen_encode_size3(xdr, value->tbytes))
+ return false;
+ if (!xdrgen_encode_size3(xdr, value->fbytes))
+ return false;
+ if (!xdrgen_encode_size3(xdr, value->abytes))
+ return false;
+ if (!xdrgen_encode_size3(xdr, value->tfiles))
+ return false;
+ if (!xdrgen_encode_size3(xdr, value->ffiles))
+ return false;
+ if (!xdrgen_encode_size3(xdr, value->afiles))
+ return false;
+ if (!xdrgen_encode_uint32(xdr, value->invarsec))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_FSSTAT3resfail(struct xdr_stream *xdr, const struct FSSTAT3resfail *value)
+{
+ if (!xdrgen_encode_post_op_attr(xdr, &value->obj_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_FSSTAT3res(struct xdr_stream *xdr, const struct FSSTAT3res *ptr)
+{
+ if (!xdrgen_encode_nfsstat3(xdr, ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_encode_FSSTAT3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_encode_FSSTAT3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_FSINFO3args(struct xdr_stream *xdr, const struct FSINFO3args *value)
+{
+ if (!xdrgen_encode_nfs_fh3(xdr, &value->fsroot))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_FSINFO3resok(struct xdr_stream *xdr, const struct FSINFO3resok *value)
+{
+ if (!xdrgen_encode_post_op_attr(xdr, &value->obj_attributes))
+ return false;
+ if (!xdrgen_encode_uint32(xdr, value->rtmax))
+ return false;
+ if (!xdrgen_encode_uint32(xdr, value->rtpref))
+ return false;
+ if (!xdrgen_encode_uint32(xdr, value->rtmult))
+ return false;
+ if (!xdrgen_encode_uint32(xdr, value->wtmax))
+ return false;
+ if (!xdrgen_encode_uint32(xdr, value->wtpref))
+ return false;
+ if (!xdrgen_encode_uint32(xdr, value->wtmult))
+ return false;
+ if (!xdrgen_encode_uint32(xdr, value->dtpref))
+ return false;
+ if (!xdrgen_encode_size3(xdr, value->maxfilesize))
+ return false;
+ if (!xdrgen_encode_nfstime3(xdr, &value->time_delta))
+ return false;
+ if (!xdrgen_encode_uint32(xdr, value->properties))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_FSINFO3resfail(struct xdr_stream *xdr, const struct FSINFO3resfail *value)
+{
+ if (!xdrgen_encode_post_op_attr(xdr, &value->obj_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_FSINFO3res(struct xdr_stream *xdr, const struct FSINFO3res *ptr)
+{
+ if (!xdrgen_encode_nfsstat3(xdr, ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_encode_FSINFO3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_encode_FSINFO3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_PATHCONF3args(struct xdr_stream *xdr, const struct PATHCONF3args *value)
+{
+ if (!xdrgen_encode_nfs_fh3(xdr, &value->object))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_PATHCONF3resok(struct xdr_stream *xdr, const struct PATHCONF3resok *value)
+{
+ if (!xdrgen_encode_post_op_attr(xdr, &value->obj_attributes))
+ return false;
+ if (!xdrgen_encode_uint32(xdr, value->linkmax))
+ return false;
+ if (!xdrgen_encode_uint32(xdr, value->name_max))
+ return false;
+ if (!xdrgen_encode_bool(xdr, value->no_trunc))
+ return false;
+ if (!xdrgen_encode_bool(xdr, value->chown_restricted))
+ return false;
+ if (!xdrgen_encode_bool(xdr, value->case_insensitive))
+ return false;
+ if (!xdrgen_encode_bool(xdr, value->case_preserving))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_PATHCONF3resfail(struct xdr_stream *xdr, const struct PATHCONF3resfail *value)
+{
+ if (!xdrgen_encode_post_op_attr(xdr, &value->obj_attributes))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_PATHCONF3res(struct xdr_stream *xdr, const struct PATHCONF3res *ptr)
+{
+ if (!xdrgen_encode_nfsstat3(xdr, ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_encode_PATHCONF3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_encode_PATHCONF3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_COMMIT3args(struct xdr_stream *xdr, const struct COMMIT3args *value)
+{
+ if (!xdrgen_encode_nfs_fh3(xdr, &value->file))
+ return false;
+ if (!xdrgen_encode_offset3(xdr, value->offset))
+ return false;
+ if (!xdrgen_encode_count3(xdr, value->count))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_COMMIT3resok(struct xdr_stream *xdr, const struct COMMIT3resok *value)
+{
+ if (!xdrgen_encode_wcc_data(xdr, &value->file_wcc))
+ return false;
+ if (!xdrgen_encode_writeverf3(xdr, value->verf))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_COMMIT3resfail(struct xdr_stream *xdr, const struct COMMIT3resfail *value)
+{
+ if (!xdrgen_encode_wcc_data(xdr, &value->file_wcc))
+ return false;
+ return true;
+}
+
+static bool __maybe_unused
+xdrgen_encode_COMMIT3res(struct xdr_stream *xdr, const struct COMMIT3res *ptr)
+{
+ if (!xdrgen_encode_nfsstat3(xdr, ptr->status))
+ return false;
+ switch (ptr->status) {
+ case NFS3_OK:
+ if (!xdrgen_encode_COMMIT3resok(xdr, &ptr->u.resok))
+ return false;
+ break;
+ default:
+ if (!xdrgen_encode_COMMIT3resfail(xdr, &ptr->u.resfail))
+ return false;
+ }
+ return true;
+}
+
+/**
+ * nfs_svc_encode_GETATTR3res - Encode a GETATTR3res result
+ * @rqstp: RPC transaction context
+ * @xdr: target XDR data stream
+ *
+ * Return values:
+ * %true: procedure results encoded successfully
+ * %false: encode failed
+ */
+bool nfs_svc_encode_GETATTR3res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct GETATTR3res *resp = rqstp->rq_resp;
+
+ return xdrgen_encode_GETATTR3res(xdr, resp);
+}
+
+/**
+ * nfs_svc_encode_SETATTR3res - Encode a SETATTR3res result
+ * @rqstp: RPC transaction context
+ * @xdr: target XDR data stream
+ *
+ * Return values:
+ * %true: procedure results encoded successfully
+ * %false: encode failed
+ */
+bool nfs_svc_encode_SETATTR3res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct SETATTR3res *resp = rqstp->rq_resp;
+
+ return xdrgen_encode_SETATTR3res(xdr, resp);
+}
+
+/**
+ * nfs_svc_encode_LOOKUP3res - Encode a LOOKUP3res result
+ * @rqstp: RPC transaction context
+ * @xdr: target XDR data stream
+ *
+ * Return values:
+ * %true: procedure results encoded successfully
+ * %false: encode failed
+ */
+bool nfs_svc_encode_LOOKUP3res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct LOOKUP3res *resp = rqstp->rq_resp;
+
+ return xdrgen_encode_LOOKUP3res(xdr, resp);
+}
+
+/**
+ * nfs_svc_encode_ACCESS3res - Encode a ACCESS3res result
+ * @rqstp: RPC transaction context
+ * @xdr: target XDR data stream
+ *
+ * Return values:
+ * %true: procedure results encoded successfully
+ * %false: encode failed
+ */
+bool nfs_svc_encode_ACCESS3res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct ACCESS3res *resp = rqstp->rq_resp;
+
+ return xdrgen_encode_ACCESS3res(xdr, resp);
+}
+
+/**
+ * nfs_svc_encode_READLINK3res - Encode a READLINK3res result
+ * @rqstp: RPC transaction context
+ * @xdr: target XDR data stream
+ *
+ * Return values:
+ * %true: procedure results encoded successfully
+ * %false: encode failed
+ */
+bool nfs_svc_encode_READLINK3res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct READLINK3res *resp = rqstp->rq_resp;
+
+ return xdrgen_encode_READLINK3res(xdr, resp);
+}
+
+/**
+ * nfs_svc_encode_READ3res - Encode a READ3res result
+ * @rqstp: RPC transaction context
+ * @xdr: target XDR data stream
+ *
+ * Return values:
+ * %true: procedure results encoded successfully
+ * %false: encode failed
+ */
+bool nfs_svc_encode_READ3res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct READ3res *resp = rqstp->rq_resp;
+
+ return xdrgen_encode_READ3res(xdr, resp);
+}
+
+/**
+ * nfs_svc_encode_WRITE3res - Encode a WRITE3res result
+ * @rqstp: RPC transaction context
+ * @xdr: target XDR data stream
+ *
+ * Return values:
+ * %true: procedure results encoded successfully
+ * %false: encode failed
+ */
+bool nfs_svc_encode_WRITE3res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct WRITE3res *resp = rqstp->rq_resp;
+
+ return xdrgen_encode_WRITE3res(xdr, resp);
+}
+
+/**
+ * nfs_svc_encode_CREATE3res - Encode a CREATE3res result
+ * @rqstp: RPC transaction context
+ * @xdr: target XDR data stream
+ *
+ * Return values:
+ * %true: procedure results encoded successfully
+ * %false: encode failed
+ */
+bool nfs_svc_encode_CREATE3res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct CREATE3res *resp = rqstp->rq_resp;
+
+ return xdrgen_encode_CREATE3res(xdr, resp);
+}
+
+/**
+ * nfs_svc_encode_MKDIR3res - Encode a MKDIR3res result
+ * @rqstp: RPC transaction context
+ * @xdr: target XDR data stream
+ *
+ * Return values:
+ * %true: procedure results encoded successfully
+ * %false: encode failed
+ */
+bool nfs_svc_encode_MKDIR3res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct MKDIR3res *resp = rqstp->rq_resp;
+
+ return xdrgen_encode_MKDIR3res(xdr, resp);
+}
+
+/**
+ * nfs_svc_encode_SYMLINK3res - Encode a SYMLINK3res result
+ * @rqstp: RPC transaction context
+ * @xdr: target XDR data stream
+ *
+ * Return values:
+ * %true: procedure results encoded successfully
+ * %false: encode failed
+ */
+bool nfs_svc_encode_SYMLINK3res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct SYMLINK3res *resp = rqstp->rq_resp;
+
+ return xdrgen_encode_SYMLINK3res(xdr, resp);
+}
+
+/**
+ * nfs_svc_encode_MKNOD3res - Encode a MKNOD3res result
+ * @rqstp: RPC transaction context
+ * @xdr: target XDR data stream
+ *
+ * Return values:
+ * %true: procedure results encoded successfully
+ * %false: encode failed
+ */
+bool nfs_svc_encode_MKNOD3res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct MKNOD3res *resp = rqstp->rq_resp;
+
+ return xdrgen_encode_MKNOD3res(xdr, resp);
+}
+
+/**
+ * nfs_svc_encode_REMOVE3res - Encode a REMOVE3res result
+ * @rqstp: RPC transaction context
+ * @xdr: target XDR data stream
+ *
+ * Return values:
+ * %true: procedure results encoded successfully
+ * %false: encode failed
+ */
+bool nfs_svc_encode_REMOVE3res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct REMOVE3res *resp = rqstp->rq_resp;
+
+ return xdrgen_encode_REMOVE3res(xdr, resp);
+}
+
+/**
+ * nfs_svc_encode_RMDIR3res - Encode a RMDIR3res result
+ * @rqstp: RPC transaction context
+ * @xdr: target XDR data stream
+ *
+ * Return values:
+ * %true: procedure results encoded successfully
+ * %false: encode failed
+ */
+bool nfs_svc_encode_RMDIR3res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct RMDIR3res *resp = rqstp->rq_resp;
+
+ return xdrgen_encode_RMDIR3res(xdr, resp);
+}
+
+/**
+ * nfs_svc_encode_RENAME3res - Encode a RENAME3res result
+ * @rqstp: RPC transaction context
+ * @xdr: target XDR data stream
+ *
+ * Return values:
+ * %true: procedure results encoded successfully
+ * %false: encode failed
+ */
+bool nfs_svc_encode_RENAME3res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct RENAME3res *resp = rqstp->rq_resp;
+
+ return xdrgen_encode_RENAME3res(xdr, resp);
+}
+
+/**
+ * nfs_svc_encode_LINK3res - Encode a LINK3res result
+ * @rqstp: RPC transaction context
+ * @xdr: target XDR data stream
+ *
+ * Return values:
+ * %true: procedure results encoded successfully
+ * %false: encode failed
+ */
+bool nfs_svc_encode_LINK3res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct LINK3res *resp = rqstp->rq_resp;
+
+ return xdrgen_encode_LINK3res(xdr, resp);
+}
+
+/**
+ * nfs_svc_encode_READDIR3res - Encode a READDIR3res result
+ * @rqstp: RPC transaction context
+ * @xdr: target XDR data stream
+ *
+ * Return values:
+ * %true: procedure results encoded successfully
+ * %false: encode failed
+ */
+bool nfs_svc_encode_READDIR3res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct READDIR3res *resp = rqstp->rq_resp;
+
+ return xdrgen_encode_READDIR3res(xdr, resp);
+}
+
+/**
+ * nfs_svc_encode_READDIRPLUS3res - Encode a READDIRPLUS3res result
+ * @rqstp: RPC transaction context
+ * @xdr: target XDR data stream
+ *
+ * Return values:
+ * %true: procedure results encoded successfully
+ * %false: encode failed
+ */
+bool nfs_svc_encode_READDIRPLUS3res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct READDIRPLUS3res *resp = rqstp->rq_resp;
+
+ return xdrgen_encode_READDIRPLUS3res(xdr, resp);
+}
+
+/**
+ * nfs_svc_encode_FSSTAT3res - Encode a FSSTAT3res result
+ * @rqstp: RPC transaction context
+ * @xdr: target XDR data stream
+ *
+ * Return values:
+ * %true: procedure results encoded successfully
+ * %false: encode failed
+ */
+bool nfs_svc_encode_FSSTAT3res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct FSSTAT3res *resp = rqstp->rq_resp;
+
+ return xdrgen_encode_FSSTAT3res(xdr, resp);
+}
+
+/**
+ * nfs_svc_encode_FSINFO3res - Encode a FSINFO3res result
+ * @rqstp: RPC transaction context
+ * @xdr: target XDR data stream
+ *
+ * Return values:
+ * %true: procedure results encoded successfully
+ * %false: encode failed
+ */
+bool nfs_svc_encode_FSINFO3res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct FSINFO3res *resp = rqstp->rq_resp;
+
+ return xdrgen_encode_FSINFO3res(xdr, resp);
+}
+
+/**
+ * nfs_svc_encode_PATHCONF3res - Encode a PATHCONF3res result
+ * @rqstp: RPC transaction context
+ * @xdr: target XDR data stream
+ *
+ * Return values:
+ * %true: procedure results encoded successfully
+ * %false: encode failed
+ */
+bool nfs_svc_encode_PATHCONF3res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct PATHCONF3res *resp = rqstp->rq_resp;
+
+ return xdrgen_encode_PATHCONF3res(xdr, resp);
+}
+
+/**
+ * nfs_svc_encode_COMMIT3res - Encode a COMMIT3res result
+ * @rqstp: RPC transaction context
+ * @xdr: target XDR data stream
+ *
+ * Return values:
+ * %true: procedure results encoded successfully
+ * %false: encode failed
+ */
+bool nfs_svc_encode_COMMIT3res(struct svc_rqst *rqstp, struct xdr_stream *xdr)
+{
+ struct COMMIT3res *resp = rqstp->rq_resp;
+
+ return xdrgen_encode_COMMIT3res(xdr, resp);
+}
diff --git a/fs/nfsd/nfs3xdr_gen.h b/fs/nfsd/nfs3xdr_gen.h
new file mode 100644
index 000000000000..e2fbb583da92
--- /dev/null
+++ b/fs/nfsd/nfs3xdr_gen.h
@@ -0,0 +1,60 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Generated by xdrgen. Manual edits will be lost. */
+/* XDR specification file: ../../Documentation/sunrpc/xdr/nfs3.x */
+/* XDR specification modification time: Fri Jul 10 23:20:55 2026 */
+
+#ifndef _LINUX_XDRGEN_NFS3_DECL_H
+#define _LINUX_XDRGEN_NFS3_DECL_H
+
+#include <linux/types.h>
+
+#include <linux/sunrpc/xdr.h>
+#include <linux/sunrpc/xdrgen/_defs.h>
+#include <linux/sunrpc/xdrgen/_builtins.h>
+#include <linux/sunrpc/xdrgen/nfs3.h>
+
+bool nfs_svc_decode_GETATTR3args(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_decode_SETATTR3args(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_decode_LOOKUP3args(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_decode_ACCESS3args(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_decode_READLINK3args(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_decode_READ3args(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_decode_WRITE3args(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_decode_CREATE3args(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_decode_MKDIR3args(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_decode_SYMLINK3args(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_decode_MKNOD3args(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_decode_REMOVE3args(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_decode_RMDIR3args(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_decode_RENAME3args(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_decode_LINK3args(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_decode_READDIR3args(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_decode_READDIRPLUS3args(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_decode_FSSTAT3args(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_decode_FSINFO3args(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_decode_PATHCONF3args(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_decode_COMMIT3args(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+
+bool nfs_svc_encode_GETATTR3res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_encode_SETATTR3res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_encode_LOOKUP3res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_encode_ACCESS3res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_encode_READLINK3res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_encode_READ3res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_encode_WRITE3res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_encode_CREATE3res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_encode_MKDIR3res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_encode_SYMLINK3res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_encode_MKNOD3res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_encode_REMOVE3res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_encode_RMDIR3res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_encode_RENAME3res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_encode_LINK3res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_encode_READDIR3res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_encode_READDIRPLUS3res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_encode_FSSTAT3res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_encode_FSINFO3res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_encode_PATHCONF3res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+bool nfs_svc_encode_COMMIT3res(struct svc_rqst *rqstp, struct xdr_stream *xdr);
+
+#endif /* _LINUX_XDRGEN_NFS3_DECL_H */
diff --git a/include/linux/sunrpc/xdrgen/nfs3.h b/include/linux/sunrpc/xdrgen/nfs3.h
new file mode 100644
index 000000000000..3afc4ffb6daa
--- /dev/null
+++ b/include/linux/sunrpc/xdrgen/nfs3.h
@@ -0,0 +1,1092 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Generated by xdrgen. Manual edits will be lost. */
+/* XDR specification file: ../../Documentation/sunrpc/xdr/nfs3.x */
+/* XDR specification modification time: Fri Jul 10 23:20:55 2026 */
+
+#ifndef _LINUX_XDRGEN_NFS3_DEF_H
+#define _LINUX_XDRGEN_NFS3_DEF_H
+
+#include <linux/types.h>
+#include <linux/sunrpc/xdrgen/_defs.h>
+
+enum { NFS3_FHSIZE = 64 };
+
+enum { NFS3_COOKIEVERFSIZE = 8 };
+
+enum { NFS3_CREATEVERFSIZE = 8 };
+
+enum { NFS3_WRITEVERFSIZE = 8 };
+
+typedef u64 uint64;
+
+typedef s64 int64;
+
+typedef u32 uint32;
+
+typedef s32 int32;
+
+typedef string filename3;
+
+typedef string nfspath3;
+
+typedef uint64 fileid3;
+
+typedef uint64 cookie3;
+
+typedef u8 cookieverf3[NFS3_COOKIEVERFSIZE];
+
+typedef u8 createverf3[NFS3_CREATEVERFSIZE];
+
+typedef u8 writeverf3[NFS3_WRITEVERFSIZE];
+
+typedef uint32 uid3;
+
+typedef uint32 gid3;
+
+typedef uint64 size3;
+
+typedef uint64 offset3;
+
+typedef uint32 mode3;
+
+typedef uint32 count3;
+
+enum nfsstat3 {
+ NFS3_OK = 0,
+ NFS3ERR_PERM = 1,
+ NFS3ERR_NOENT = 2,
+ NFS3ERR_IO = 5,
+ NFS3ERR_NXIO = 6,
+ NFS3ERR_ACCES = 13,
+ NFS3ERR_EXIST = 17,
+ NFS3ERR_XDEV = 18,
+ NFS3ERR_NODEV = 19,
+ NFS3ERR_NOTDIR = 20,
+ NFS3ERR_ISDIR = 21,
+ NFS3ERR_INVAL = 22,
+ NFS3ERR_FBIG = 27,
+ NFS3ERR_NOSPC = 28,
+ NFS3ERR_ROFS = 30,
+ NFS3ERR_MLINK = 31,
+ NFS3ERR_NAMETOOLONG = 63,
+ NFS3ERR_NOTEMPTY = 66,
+ NFS3ERR_DQUOT = 69,
+ NFS3ERR_STALE = 70,
+ NFS3ERR_REMOTE = 71,
+ NFS3ERR_BADHANDLE = 10001,
+ NFS3ERR_NOT_SYNC = 10002,
+ NFS3ERR_BAD_COOKIE = 10003,
+ NFS3ERR_NOTSUPP = 10004,
+ NFS3ERR_TOOSMALL = 10005,
+ NFS3ERR_SERVERFAULT = 10006,
+ NFS3ERR_BADTYPE = 10007,
+ NFS3ERR_JUKEBOX = 10008,
+};
+
+typedef enum nfsstat3 nfsstat3;
+
+enum ftype3 {
+ NF3REG = 1,
+ NF3DIR = 2,
+ NF3BLK = 3,
+ NF3CHR = 4,
+ NF3LNK = 5,
+ NF3SOCK = 6,
+ NF3FIFO = 7,
+};
+
+typedef enum ftype3 ftype3;
+
+struct specdata3 {
+ uint32 specdata1;
+ uint32 specdata2;
+};
+
+struct nfs_fh3 {
+ opaque data;
+};
+
+struct nfstime3 {
+ uint32 seconds;
+ uint32 nseconds;
+};
+
+struct fattr3 {
+ ftype3 type;
+ mode3 mode;
+ uint32 nlink;
+ uid3 uid;
+ gid3 gid;
+ size3 size;
+ size3 used;
+ struct specdata3 rdev;
+ uint64 fsid;
+ fileid3 fileid;
+ struct nfstime3 atime;
+ struct nfstime3 mtime;
+ struct nfstime3 ctime;
+};
+
+struct post_op_attr {
+ bool attributes_follow;
+ union {
+ struct fattr3 attributes;
+ } u;
+};
+
+struct wcc_attr {
+ size3 size;
+ struct nfstime3 mtime;
+ struct nfstime3 ctime;
+};
+
+struct pre_op_attr {
+ bool attributes_follow;
+ union {
+ struct wcc_attr attributes;
+ } u;
+};
+
+struct wcc_data {
+ struct pre_op_attr before;
+ struct post_op_attr after;
+};
+
+struct post_op_fh3 {
+ bool handle_follows;
+ union {
+ struct nfs_fh3 handle;
+ } u;
+};
+
+enum time_how {
+ DONT_CHANGE = 0,
+ SET_TO_SERVER_TIME = 1,
+ SET_TO_CLIENT_TIME = 2,
+};
+
+typedef enum time_how time_how;
+
+struct set_mode3 {
+ bool set_it;
+ union {
+ mode3 mode;
+ } u;
+};
+
+struct set_uid3 {
+ bool set_it;
+ union {
+ uid3 uid;
+ } u;
+};
+
+struct set_gid3 {
+ bool set_it;
+ union {
+ gid3 gid;
+ } u;
+};
+
+struct set_size3 {
+ bool set_it;
+ union {
+ size3 size;
+ } u;
+};
+
+struct set_atime {
+ time_how set_it;
+ union {
+ struct nfstime3 atime;
+ } u;
+};
+
+struct set_mtime {
+ time_how set_it;
+ union {
+ struct nfstime3 mtime;
+ } u;
+};
+
+struct sattr3 {
+ struct set_mode3 mode;
+ struct set_uid3 uid;
+ struct set_gid3 gid;
+ struct set_size3 size;
+ struct set_atime atime;
+ struct set_mtime mtime;
+};
+
+struct diropargs3 {
+ struct nfs_fh3 dir;
+ filename3 name;
+};
+
+struct GETATTR3args {
+ struct nfs_fh3 object;
+};
+
+struct GETATTR3resok {
+ struct fattr3 obj_attributes;
+};
+
+struct GETATTR3res {
+ nfsstat3 status;
+ union {
+ struct GETATTR3resok resok;
+ } u;
+};
+
+struct sattrguard3 {
+ bool check;
+ union {
+ struct nfstime3 obj_ctime;
+ } u;
+};
+
+struct SETATTR3args {
+ struct nfs_fh3 object;
+ struct sattr3 new_attributes;
+ struct sattrguard3 guard;
+};
+
+struct SETATTR3resok {
+ struct wcc_data obj_wcc;
+};
+
+struct SETATTR3resfail {
+ struct wcc_data obj_wcc;
+};
+
+struct SETATTR3res {
+ nfsstat3 status;
+ union {
+ struct SETATTR3resok resok;
+ struct SETATTR3resfail resfail;
+ } u;
+};
+
+struct LOOKUP3args {
+ struct diropargs3 what;
+};
+
+struct LOOKUP3resok {
+ struct nfs_fh3 object;
+ struct post_op_attr obj_attributes;
+ struct post_op_attr dir_attributes;
+};
+
+struct LOOKUP3resfail {
+ struct post_op_attr dir_attributes;
+};
+
+struct LOOKUP3res {
+ nfsstat3 status;
+ union {
+ struct LOOKUP3resok resok;
+ struct LOOKUP3resfail resfail;
+ } u;
+};
+
+enum { ACCESS3_READ = 0x0001 };
+
+enum { ACCESS3_LOOKUP = 0x0002 };
+
+enum { ACCESS3_MODIFY = 0x0004 };
+
+enum { ACCESS3_EXTEND = 0x0008 };
+
+enum { ACCESS3_DELETE = 0x0010 };
+
+enum { ACCESS3_EXECUTE = 0x0020 };
+
+struct ACCESS3args {
+ struct nfs_fh3 object;
+ uint32 access;
+};
+
+struct ACCESS3resok {
+ struct post_op_attr obj_attributes;
+ uint32 access;
+};
+
+struct ACCESS3resfail {
+ struct post_op_attr obj_attributes;
+};
+
+struct ACCESS3res {
+ nfsstat3 status;
+ union {
+ struct ACCESS3resok resok;
+ struct ACCESS3resfail resfail;
+ } u;
+};
+
+struct READLINK3args {
+ struct nfs_fh3 symlink;
+};
+
+struct READLINK3resok {
+ struct post_op_attr symlink_attributes;
+ nfspath3 data;
+};
+
+struct READLINK3resfail {
+ struct post_op_attr symlink_attributes;
+};
+
+struct READLINK3res {
+ nfsstat3 status;
+ union {
+ struct READLINK3resok resok;
+ struct READLINK3resfail resfail;
+ } u;
+};
+
+struct READ3args {
+ struct nfs_fh3 file;
+ offset3 offset;
+ count3 count;
+};
+
+struct READ3resok {
+ struct post_op_attr file_attributes;
+ count3 count;
+ bool eof;
+ opaque data;
+};
+
+struct READ3resfail {
+ struct post_op_attr file_attributes;
+};
+
+struct READ3res {
+ nfsstat3 status;
+ union {
+ struct READ3resok resok;
+ struct READ3resfail resfail;
+ } u;
+};
+
+enum stable_how {
+ UNSTABLE = 0,
+ DATA_SYNC = 1,
+ FILE_SYNC = 2,
+};
+
+typedef enum stable_how stable_how;
+
+struct WRITE3args {
+ struct nfs_fh3 file;
+ offset3 offset;
+ count3 count;
+ stable_how stable;
+ opaque data;
+};
+
+struct WRITE3resok {
+ struct wcc_data file_wcc;
+ count3 count;
+ stable_how committed;
+ writeverf3 verf;
+};
+
+struct WRITE3resfail {
+ struct wcc_data file_wcc;
+};
+
+struct WRITE3res {
+ nfsstat3 status;
+ union {
+ struct WRITE3resok resok;
+ struct WRITE3resfail resfail;
+ } u;
+};
+
+enum createmode3 {
+ UNCHECKED = 0,
+ GUARDED = 1,
+ EXCLUSIVE = 2,
+};
+
+typedef enum createmode3 createmode3;
+
+struct createhow3 {
+ createmode3 mode;
+ union {
+ struct sattr3 obj_attributes;
+ createverf3 verf;
+ } u;
+};
+
+struct CREATE3args {
+ struct diropargs3 where;
+ struct createhow3 how;
+};
+
+struct CREATE3resok {
+ struct post_op_fh3 obj;
+ struct post_op_attr obj_attributes;
+ struct wcc_data dir_wcc;
+};
+
+struct CREATE3resfail {
+ struct wcc_data dir_wcc;
+};
+
+struct CREATE3res {
+ nfsstat3 status;
+ union {
+ struct CREATE3resok resok;
+ struct CREATE3resfail resfail;
+ } u;
+};
+
+struct MKDIR3args {
+ struct diropargs3 where;
+ struct sattr3 attributes;
+};
+
+struct MKDIR3resok {
+ struct post_op_fh3 obj;
+ struct post_op_attr obj_attributes;
+ struct wcc_data dir_wcc;
+};
+
+struct MKDIR3resfail {
+ struct wcc_data dir_wcc;
+};
+
+struct MKDIR3res {
+ nfsstat3 status;
+ union {
+ struct MKDIR3resok resok;
+ struct MKDIR3resfail resfail;
+ } u;
+};
+
+struct symlinkdata3 {
+ struct sattr3 symlink_attributes;
+ nfspath3 symlink_data;
+};
+
+struct SYMLINK3args {
+ struct diropargs3 where;
+ struct symlinkdata3 symlink;
+};
+
+struct SYMLINK3resok {
+ struct post_op_fh3 obj;
+ struct post_op_attr obj_attributes;
+ struct wcc_data dir_wcc;
+};
+
+struct SYMLINK3resfail {
+ struct wcc_data dir_wcc;
+};
+
+struct SYMLINK3res {
+ nfsstat3 status;
+ union {
+ struct SYMLINK3resok resok;
+ struct SYMLINK3resfail resfail;
+ } u;
+};
+
+struct devicedata3 {
+ struct sattr3 dev_attributes;
+ struct specdata3 spec;
+};
+
+struct mknoddata3 {
+ ftype3 type;
+ union {
+ struct devicedata3 device;
+ struct sattr3 pipe_attributes;
+ } u;
+};
+
+struct MKNOD3args {
+ struct diropargs3 where;
+ struct mknoddata3 what;
+};
+
+struct MKNOD3resok {
+ struct post_op_fh3 obj;
+ struct post_op_attr obj_attributes;
+ struct wcc_data dir_wcc;
+};
+
+struct MKNOD3resfail {
+ struct wcc_data dir_wcc;
+};
+
+struct MKNOD3res {
+ nfsstat3 status;
+ union {
+ struct MKNOD3resok resok;
+ struct MKNOD3resfail resfail;
+ } u;
+};
+
+struct REMOVE3args {
+ struct diropargs3 object;
+};
+
+struct REMOVE3resok {
+ struct wcc_data dir_wcc;
+};
+
+struct REMOVE3resfail {
+ struct wcc_data dir_wcc;
+};
+
+struct REMOVE3res {
+ nfsstat3 status;
+ union {
+ struct REMOVE3resok resok;
+ struct REMOVE3resfail resfail;
+ } u;
+};
+
+struct RMDIR3args {
+ struct diropargs3 object;
+};
+
+struct RMDIR3resok {
+ struct wcc_data dir_wcc;
+};
+
+struct RMDIR3resfail {
+ struct wcc_data dir_wcc;
+};
+
+struct RMDIR3res {
+ nfsstat3 status;
+ union {
+ struct RMDIR3resok resok;
+ struct RMDIR3resfail resfail;
+ } u;
+};
+
+struct RENAME3args {
+ struct diropargs3 from;
+ struct diropargs3 to;
+};
+
+struct RENAME3resok {
+ struct wcc_data fromdir_wcc;
+ struct wcc_data todir_wcc;
+};
+
+struct RENAME3resfail {
+ struct wcc_data fromdir_wcc;
+ struct wcc_data todir_wcc;
+};
+
+struct RENAME3res {
+ nfsstat3 status;
+ union {
+ struct RENAME3resok resok;
+ struct RENAME3resfail resfail;
+ } u;
+};
+
+struct LINK3args {
+ struct nfs_fh3 file;
+ struct diropargs3 link;
+};
+
+struct LINK3resok {
+ struct post_op_attr file_attributes;
+ struct wcc_data linkdir_wcc;
+};
+
+struct LINK3resfail {
+ struct post_op_attr file_attributes;
+ struct wcc_data linkdir_wcc;
+};
+
+struct LINK3res {
+ nfsstat3 status;
+ union {
+ struct LINK3resok resok;
+ struct LINK3resfail resfail;
+ } u;
+};
+
+struct READDIR3args {
+ struct nfs_fh3 dir;
+ cookie3 cookie;
+ cookieverf3 cookieverf;
+ count3 count;
+};
+
+struct entry3 {
+ fileid3 fileid;
+ filename3 name;
+ cookie3 cookie;
+};
+
+struct dirlist3 {
+ struct entry3 *entries;
+ bool eof;
+};
+
+struct READDIR3resok {
+ struct post_op_attr dir_attributes;
+ cookieverf3 cookieverf;
+ struct dirlist3 reply;
+};
+
+struct READDIR3resfail {
+ struct post_op_attr dir_attributes;
+};
+
+struct READDIR3res {
+ nfsstat3 status;
+ union {
+ struct READDIR3resok resok;
+ struct READDIR3resfail resfail;
+ } u;
+};
+
+struct READDIRPLUS3args {
+ struct nfs_fh3 dir;
+ cookie3 cookie;
+ cookieverf3 cookieverf;
+ count3 dircount;
+ count3 maxcount;
+};
+
+struct entryplus3 {
+ fileid3 fileid;
+ filename3 name;
+ cookie3 cookie;
+ struct post_op_attr name_attributes;
+ struct post_op_fh3 name_handle;
+};
+
+struct dirlistplus3 {
+ struct entryplus3 *entries;
+ bool eof;
+};
+
+struct READDIRPLUS3resok {
+ struct post_op_attr dir_attributes;
+ cookieverf3 cookieverf;
+ struct dirlistplus3 reply;
+};
+
+struct READDIRPLUS3resfail {
+ struct post_op_attr dir_attributes;
+};
+
+struct READDIRPLUS3res {
+ nfsstat3 status;
+ union {
+ struct READDIRPLUS3resok resok;
+ struct READDIRPLUS3resfail resfail;
+ } u;
+};
+
+struct FSSTAT3args {
+ struct nfs_fh3 fsroot;
+};
+
+struct FSSTAT3resok {
+ struct post_op_attr obj_attributes;
+ size3 tbytes;
+ size3 fbytes;
+ size3 abytes;
+ size3 tfiles;
+ size3 ffiles;
+ size3 afiles;
+ uint32 invarsec;
+};
+
+struct FSSTAT3resfail {
+ struct post_op_attr obj_attributes;
+};
+
+struct FSSTAT3res {
+ nfsstat3 status;
+ union {
+ struct FSSTAT3resok resok;
+ struct FSSTAT3resfail resfail;
+ } u;
+};
+
+enum { FSF3_LINK = 0x0001 };
+
+enum { FSF3_SYMLINK = 0x0002 };
+
+enum { FSF3_HOMOGENEOUS = 0x0008 };
+
+enum { FSF3_CANSETTIME = 0x0010 };
+
+struct FSINFO3args {
+ struct nfs_fh3 fsroot;
+};
+
+struct FSINFO3resok {
+ struct post_op_attr obj_attributes;
+ uint32 rtmax;
+ uint32 rtpref;
+ uint32 rtmult;
+ uint32 wtmax;
+ uint32 wtpref;
+ uint32 wtmult;
+ uint32 dtpref;
+ size3 maxfilesize;
+ struct nfstime3 time_delta;
+ uint32 properties;
+};
+
+struct FSINFO3resfail {
+ struct post_op_attr obj_attributes;
+};
+
+struct FSINFO3res {
+ nfsstat3 status;
+ union {
+ struct FSINFO3resok resok;
+ struct FSINFO3resfail resfail;
+ } u;
+};
+
+struct PATHCONF3args {
+ struct nfs_fh3 object;
+};
+
+struct PATHCONF3resok {
+ struct post_op_attr obj_attributes;
+ uint32 linkmax;
+ uint32 name_max;
+ bool no_trunc;
+ bool chown_restricted;
+ bool case_insensitive;
+ bool case_preserving;
+};
+
+struct PATHCONF3resfail {
+ struct post_op_attr obj_attributes;
+};
+
+struct PATHCONF3res {
+ nfsstat3 status;
+ union {
+ struct PATHCONF3resok resok;
+ struct PATHCONF3resfail resfail;
+ } u;
+};
+
+struct COMMIT3args {
+ struct nfs_fh3 file;
+ offset3 offset;
+ count3 count;
+};
+
+struct COMMIT3resok {
+ struct wcc_data file_wcc;
+ writeverf3 verf;
+};
+
+struct COMMIT3resfail {
+ struct wcc_data file_wcc;
+};
+
+struct COMMIT3res {
+ nfsstat3 status;
+ union {
+ struct COMMIT3resok resok;
+ struct COMMIT3resfail resfail;
+ } u;
+};
+
+enum {
+ NFSPROC3_NULL = 0,
+ NFSPROC3_GETATTR = 1,
+ NFSPROC3_SETATTR = 2,
+ NFSPROC3_LOOKUP = 3,
+ NFSPROC3_ACCESS = 4,
+ NFSPROC3_READLINK = 5,
+ NFSPROC3_READ = 6,
+ NFSPROC3_WRITE = 7,
+ NFSPROC3_CREATE = 8,
+ NFSPROC3_MKDIR = 9,
+ NFSPROC3_SYMLINK = 10,
+ NFSPROC3_MKNOD = 11,
+ NFSPROC3_REMOVE = 12,
+ NFSPROC3_RMDIR = 13,
+ NFSPROC3_RENAME = 14,
+ NFSPROC3_LINK = 15,
+ NFSPROC3_READDIR = 16,
+ NFSPROC3_READDIRPLUS = 17,
+ NFSPROC3_FSSTAT = 18,
+ NFSPROC3_FSINFO = 19,
+ NFSPROC3_PATHCONF = 20,
+ NFSPROC3_COMMIT = 21,
+};
+
+#ifndef NFS_PROGRAM
+#define NFS_PROGRAM (100003)
+#endif
+
+#define NFS3_uint64_sz \
+ (XDR_unsigned_hyper)
+#define NFS3_int64_sz \
+ (XDR_hyper)
+#define NFS3_uint32_sz \
+ (XDR_unsigned_long)
+#define NFS3_int32_sz \
+ (XDR_long)
+#define NFS3_filename3_sz (XDR_unsigned_int)
+#define NFS3_nfspath3_sz (XDR_unsigned_int)
+#define NFS3_fileid3_sz \
+ (NFS3_uint64_sz)
+#define NFS3_cookie3_sz \
+ (NFS3_uint64_sz)
+#define NFS3_cookieverf3_sz (XDR_QUADLEN(NFS3_COOKIEVERFSIZE))
+#define NFS3_createverf3_sz (XDR_QUADLEN(NFS3_CREATEVERFSIZE))
+#define NFS3_writeverf3_sz (XDR_QUADLEN(NFS3_WRITEVERFSIZE))
+#define NFS3_uid3_sz \
+ (NFS3_uint32_sz)
+#define NFS3_gid3_sz \
+ (NFS3_uint32_sz)
+#define NFS3_size3_sz \
+ (NFS3_uint64_sz)
+#define NFS3_offset3_sz \
+ (NFS3_uint64_sz)
+#define NFS3_mode3_sz \
+ (NFS3_uint32_sz)
+#define NFS3_count3_sz \
+ (NFS3_uint32_sz)
+#define NFS3_nfsstat3_sz (XDR_int)
+#define NFS3_ftype3_sz (XDR_int)
+#define NFS3_specdata3_sz \
+ (NFS3_uint32_sz + NFS3_uint32_sz)
+#define NFS3_nfs_fh3_sz \
+ (XDR_unsigned_int + XDR_QUADLEN(NFS3_FHSIZE))
+#define NFS3_nfstime3_sz \
+ (NFS3_uint32_sz + NFS3_uint32_sz)
+#define NFS3_fattr3_sz \
+ (NFS3_ftype3_sz + NFS3_mode3_sz + NFS3_uint32_sz + NFS3_uid3_sz + NFS3_gid3_sz + NFS3_size3_sz + NFS3_size3_sz + NFS3_specdata3_sz + NFS3_uint64_sz + NFS3_fileid3_sz + NFS3_nfstime3_sz + NFS3_nfstime3_sz + NFS3_nfstime3_sz)
+#define NFS3_post_op_attr_sz \
+ (XDR_bool + NFS3_fattr3_sz)
+#define NFS3_wcc_attr_sz \
+ (NFS3_size3_sz + NFS3_nfstime3_sz + NFS3_nfstime3_sz)
+#define NFS3_pre_op_attr_sz \
+ (XDR_bool + NFS3_wcc_attr_sz)
+#define NFS3_wcc_data_sz \
+ (NFS3_pre_op_attr_sz + NFS3_post_op_attr_sz)
+#define NFS3_post_op_fh3_sz \
+ (XDR_bool + NFS3_nfs_fh3_sz)
+#define NFS3_time_how_sz (XDR_int)
+#define NFS3_set_mode3_sz \
+ (NFS3_time_how_sz + NFS3_mode3_sz)
+#define NFS3_set_uid3_sz \
+ (NFS3_time_how_sz + NFS3_uid3_sz)
+#define NFS3_set_gid3_sz \
+ (NFS3_time_how_sz + NFS3_gid3_sz)
+#define NFS3_set_size3_sz \
+ (NFS3_time_how_sz + NFS3_size3_sz)
+#define NFS3_set_atime_sz \
+ (NFS3_time_how_sz + NFS3_nfstime3_sz)
+#define NFS3_set_mtime_sz \
+ (NFS3_time_how_sz + NFS3_nfstime3_sz)
+#define NFS3_sattr3_sz \
+ (NFS3_set_mode3_sz + NFS3_set_uid3_sz + NFS3_set_gid3_sz + NFS3_set_size3_sz + NFS3_set_atime_sz + NFS3_set_mtime_sz)
+#define NFS3_diropargs3_sz \
+ (NFS3_nfs_fh3_sz + NFS3_filename3_sz)
+#define NFS3_GETATTR3args_sz \
+ (NFS3_nfs_fh3_sz)
+#define NFS3_GETATTR3resok_sz \
+ (NFS3_fattr3_sz)
+#define NFS3_GETATTR3res_sz \
+ (NFS3_nfsstat3_sz + NFS3_GETATTR3resok_sz)
+#define NFS3_sattrguard3_sz \
+ (XDR_bool + NFS3_nfstime3_sz)
+#define NFS3_SETATTR3args_sz \
+ (NFS3_nfs_fh3_sz + NFS3_sattr3_sz + NFS3_sattrguard3_sz)
+#define NFS3_SETATTR3resok_sz \
+ (NFS3_wcc_data_sz)
+#define NFS3_SETATTR3resfail_sz \
+ (NFS3_wcc_data_sz)
+#define NFS3_SETATTR3res_sz \
+ (NFS3_nfsstat3_sz + NFS3_SETATTR3resok_sz)
+#define NFS3_LOOKUP3args_sz \
+ (NFS3_diropargs3_sz)
+#define NFS3_LOOKUP3resok_sz \
+ (NFS3_nfs_fh3_sz + NFS3_post_op_attr_sz + NFS3_post_op_attr_sz)
+#define NFS3_LOOKUP3resfail_sz \
+ (NFS3_post_op_attr_sz)
+#define NFS3_LOOKUP3res_sz \
+ (NFS3_nfsstat3_sz + NFS3_LOOKUP3resok_sz)
+#define NFS3_ACCESS3args_sz \
+ (NFS3_nfs_fh3_sz + NFS3_uint32_sz)
+#define NFS3_ACCESS3resok_sz \
+ (NFS3_post_op_attr_sz + NFS3_uint32_sz)
+#define NFS3_ACCESS3resfail_sz \
+ (NFS3_post_op_attr_sz)
+#define NFS3_ACCESS3res_sz \
+ (NFS3_nfsstat3_sz + NFS3_ACCESS3resok_sz)
+#define NFS3_READLINK3args_sz \
+ (NFS3_nfs_fh3_sz)
+#define NFS3_READLINK3resok_sz \
+ (NFS3_post_op_attr_sz + NFS3_nfspath3_sz)
+#define NFS3_READLINK3resfail_sz \
+ (NFS3_post_op_attr_sz)
+#define NFS3_READLINK3res_sz \
+ (NFS3_nfsstat3_sz + NFS3_READLINK3resok_sz)
+#define NFS3_READ3args_sz \
+ (NFS3_nfs_fh3_sz + NFS3_offset3_sz + NFS3_count3_sz)
+#define NFS3_READ3resok_sz \
+ (NFS3_post_op_attr_sz + NFS3_count3_sz + XDR_bool + XDR_unsigned_int)
+#define NFS3_READ3resfail_sz \
+ (NFS3_post_op_attr_sz)
+#define NFS3_READ3res_sz \
+ (NFS3_nfsstat3_sz + NFS3_READ3resok_sz)
+#define NFS3_stable_how_sz (XDR_int)
+#define NFS3_WRITE3args_sz \
+ (NFS3_nfs_fh3_sz + NFS3_offset3_sz + NFS3_count3_sz + NFS3_stable_how_sz + XDR_unsigned_int)
+#define NFS3_WRITE3resok_sz \
+ (NFS3_wcc_data_sz + NFS3_count3_sz + NFS3_stable_how_sz + NFS3_writeverf3_sz)
+#define NFS3_WRITE3resfail_sz \
+ (NFS3_wcc_data_sz)
+#define NFS3_WRITE3res_sz \
+ (NFS3_nfsstat3_sz + NFS3_WRITE3resok_sz)
+#define NFS3_createmode3_sz (XDR_int)
+#define NFS3_createhow3_sz \
+ (NFS3_createmode3_sz + NFS3_sattr3_sz)
+#define NFS3_CREATE3args_sz \
+ (NFS3_diropargs3_sz + NFS3_createhow3_sz)
+#define NFS3_CREATE3resok_sz \
+ (NFS3_post_op_fh3_sz + NFS3_post_op_attr_sz + NFS3_wcc_data_sz)
+#define NFS3_CREATE3resfail_sz \
+ (NFS3_wcc_data_sz)
+#define NFS3_CREATE3res_sz \
+ (NFS3_nfsstat3_sz + NFS3_CREATE3resok_sz)
+#define NFS3_MKDIR3args_sz \
+ (NFS3_diropargs3_sz + NFS3_sattr3_sz)
+#define NFS3_MKDIR3resok_sz \
+ (NFS3_post_op_fh3_sz + NFS3_post_op_attr_sz + NFS3_wcc_data_sz)
+#define NFS3_MKDIR3resfail_sz \
+ (NFS3_wcc_data_sz)
+#define NFS3_MKDIR3res_sz \
+ (NFS3_nfsstat3_sz + NFS3_MKDIR3resok_sz)
+#define NFS3_symlinkdata3_sz \
+ (NFS3_sattr3_sz + NFS3_nfspath3_sz)
+#define NFS3_SYMLINK3args_sz \
+ (NFS3_diropargs3_sz + NFS3_symlinkdata3_sz)
+#define NFS3_SYMLINK3resok_sz \
+ (NFS3_post_op_fh3_sz + NFS3_post_op_attr_sz + NFS3_wcc_data_sz)
+#define NFS3_SYMLINK3resfail_sz \
+ (NFS3_wcc_data_sz)
+#define NFS3_SYMLINK3res_sz \
+ (NFS3_nfsstat3_sz + NFS3_SYMLINK3resok_sz)
+#define NFS3_devicedata3_sz \
+ (NFS3_sattr3_sz + NFS3_specdata3_sz)
+#define NFS3_mknoddata3_sz \
+ (NFS3_ftype3_sz + NFS3_devicedata3_sz)
+#define NFS3_MKNOD3args_sz \
+ (NFS3_diropargs3_sz + NFS3_mknoddata3_sz)
+#define NFS3_MKNOD3resok_sz \
+ (NFS3_post_op_fh3_sz + NFS3_post_op_attr_sz + NFS3_wcc_data_sz)
+#define NFS3_MKNOD3resfail_sz \
+ (NFS3_wcc_data_sz)
+#define NFS3_MKNOD3res_sz \
+ (NFS3_nfsstat3_sz + NFS3_MKNOD3resok_sz)
+#define NFS3_REMOVE3args_sz \
+ (NFS3_diropargs3_sz)
+#define NFS3_REMOVE3resok_sz \
+ (NFS3_wcc_data_sz)
+#define NFS3_REMOVE3resfail_sz \
+ (NFS3_wcc_data_sz)
+#define NFS3_REMOVE3res_sz \
+ (NFS3_nfsstat3_sz + NFS3_REMOVE3resok_sz)
+#define NFS3_RMDIR3args_sz \
+ (NFS3_diropargs3_sz)
+#define NFS3_RMDIR3resok_sz \
+ (NFS3_wcc_data_sz)
+#define NFS3_RMDIR3resfail_sz \
+ (NFS3_wcc_data_sz)
+#define NFS3_RMDIR3res_sz \
+ (NFS3_nfsstat3_sz + NFS3_RMDIR3resok_sz)
+#define NFS3_RENAME3args_sz \
+ (NFS3_diropargs3_sz + NFS3_diropargs3_sz)
+#define NFS3_RENAME3resok_sz \
+ (NFS3_wcc_data_sz + NFS3_wcc_data_sz)
+#define NFS3_RENAME3resfail_sz \
+ (NFS3_wcc_data_sz + NFS3_wcc_data_sz)
+#define NFS3_RENAME3res_sz \
+ (NFS3_nfsstat3_sz + NFS3_RENAME3resok_sz)
+#define NFS3_LINK3args_sz \
+ (NFS3_nfs_fh3_sz + NFS3_diropargs3_sz)
+#define NFS3_LINK3resok_sz \
+ (NFS3_post_op_attr_sz + NFS3_wcc_data_sz)
+#define NFS3_LINK3resfail_sz \
+ (NFS3_post_op_attr_sz + NFS3_wcc_data_sz)
+#define NFS3_LINK3res_sz \
+ (NFS3_nfsstat3_sz + NFS3_LINK3resok_sz)
+#define NFS3_READDIR3args_sz \
+ (NFS3_nfs_fh3_sz + NFS3_cookie3_sz + NFS3_cookieverf3_sz + NFS3_count3_sz)
+#define NFS3_entry3_sz \
+ (XDR_bool + NFS3_fileid3_sz + NFS3_filename3_sz + NFS3_cookie3_sz)
+#define NFS3_dirlist3_sz \
+ (XDR_bool + XDR_bool)
+#define NFS3_READDIR3resok_sz \
+ (NFS3_post_op_attr_sz + NFS3_cookieverf3_sz + NFS3_dirlist3_sz)
+#define NFS3_READDIR3resfail_sz \
+ (NFS3_post_op_attr_sz)
+#define NFS3_READDIR3res_sz \
+ (NFS3_nfsstat3_sz + NFS3_READDIR3resok_sz)
+#define NFS3_READDIRPLUS3args_sz \
+ (NFS3_nfs_fh3_sz + NFS3_cookie3_sz + NFS3_cookieverf3_sz + NFS3_count3_sz + NFS3_count3_sz)
+#define NFS3_entryplus3_sz \
+ (XDR_bool + NFS3_fileid3_sz + NFS3_filename3_sz + NFS3_cookie3_sz + NFS3_post_op_attr_sz + NFS3_post_op_fh3_sz)
+#define NFS3_dirlistplus3_sz \
+ (XDR_bool + XDR_bool)
+#define NFS3_READDIRPLUS3resok_sz \
+ (NFS3_post_op_attr_sz + NFS3_cookieverf3_sz + NFS3_dirlistplus3_sz)
+#define NFS3_READDIRPLUS3resfail_sz \
+ (NFS3_post_op_attr_sz)
+#define NFS3_READDIRPLUS3res_sz \
+ (NFS3_nfsstat3_sz + NFS3_READDIRPLUS3resok_sz)
+#define NFS3_FSSTAT3args_sz \
+ (NFS3_nfs_fh3_sz)
+#define NFS3_FSSTAT3resok_sz \
+ (NFS3_post_op_attr_sz + NFS3_size3_sz + NFS3_size3_sz + NFS3_size3_sz + NFS3_size3_sz + NFS3_size3_sz + NFS3_size3_sz + NFS3_uint32_sz)
+#define NFS3_FSSTAT3resfail_sz \
+ (NFS3_post_op_attr_sz)
+#define NFS3_FSSTAT3res_sz \
+ (NFS3_nfsstat3_sz + NFS3_FSSTAT3resok_sz)
+#define NFS3_FSINFO3args_sz \
+ (NFS3_nfs_fh3_sz)
+#define NFS3_FSINFO3resok_sz \
+ (NFS3_post_op_attr_sz + NFS3_uint32_sz + NFS3_uint32_sz + NFS3_uint32_sz + NFS3_uint32_sz + NFS3_uint32_sz + NFS3_uint32_sz + NFS3_uint32_sz + NFS3_size3_sz + NFS3_nfstime3_sz + NFS3_uint32_sz)
+#define NFS3_FSINFO3resfail_sz \
+ (NFS3_post_op_attr_sz)
+#define NFS3_FSINFO3res_sz \
+ (NFS3_nfsstat3_sz + NFS3_FSINFO3resok_sz)
+#define NFS3_PATHCONF3args_sz \
+ (NFS3_nfs_fh3_sz)
+#define NFS3_PATHCONF3resok_sz \
+ (NFS3_post_op_attr_sz + NFS3_uint32_sz + NFS3_uint32_sz + XDR_bool + XDR_bool + XDR_bool + XDR_bool)
+#define NFS3_PATHCONF3resfail_sz \
+ (NFS3_post_op_attr_sz)
+#define NFS3_PATHCONF3res_sz \
+ (NFS3_nfsstat3_sz + NFS3_PATHCONF3resok_sz)
+#define NFS3_COMMIT3args_sz \
+ (NFS3_nfs_fh3_sz + NFS3_offset3_sz + NFS3_count3_sz)
+#define NFS3_COMMIT3resok_sz \
+ (NFS3_wcc_data_sz + NFS3_writeverf3_sz)
+#define NFS3_COMMIT3resfail_sz \
+ (NFS3_wcc_data_sz)
+#define NFS3_COMMIT3res_sz \
+ (NFS3_nfsstat3_sz + NFS3_COMMIT3resok_sz)
+#define NFS3_MAX_ARGS_SZ \
+ (NFS3_MKNOD3args_sz)
+
+#endif /* _LINUX_XDRGEN_NFS3_DEF_H */
--
2.55.0
next prev parent reply other threads:[~2026-09-24 17:10 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-24 17:09 [PATCH v2 00/33] Convert server-side NFSv3 XDR to use xdrgen Chuck Lever
2026-09-24 17:09 ` [PATCH v2 01/33] NFSD: Report a first-batch readdir error in the reply status Chuck Lever
2026-09-24 17:09 ` [PATCH v2 02/33] Documentation: Add the RPC language description of NFSv3 Chuck Lever
2026-09-24 17:09 ` Chuck Lever [this message]
2026-09-24 17:09 ` [PATCH v2 04/33] NFSD: Replace nfs3.h with nfs3xdr_gen.h Chuck Lever
2026-09-24 17:09 ` [PATCH v2 05/33] NFSD: Replace the nfsd3_createres macro Chuck Lever
2026-09-24 17:09 ` [PATCH v2 06/33] NFSD: Relocate the NFSv3 XDR storage union into nfs3proc.c Chuck Lever
2026-09-24 17:09 ` [PATCH v2 07/33] NFSD: Use xdrgen XDR functions for the NFSv3 NULL procedure Chuck Lever
2026-09-24 17:09 ` [PATCH v2 08/33] NFSD: Use xdrgen XDR functions for NFSv3 GETATTR procedure Chuck Lever
2026-09-24 17:09 ` [PATCH v2 09/33] NFSD: Use xdrgen XDR functions for NFSv3 SETATTR procedure Chuck Lever
2026-09-24 17:09 ` [PATCH v2 10/33] NFSD: Use xdrgen XDR functions for the NFSv3 LOOKUP procedure Chuck Lever
2026-09-24 17:09 ` [PATCH v2 11/33] NFSD: Use xdrgen XDR functions for NFSv3 ACCESS procedure Chuck Lever
2026-09-24 17:09 ` [PATCH v2 12/33] NFSD: Use xdrgen XDR functions for NFSv3 READLINK procedure Chuck Lever
2026-09-24 17:09 ` [PATCH v2 13/33] NFSD: Use xdrgen XDR functions for NFSv3 READ procedure Chuck Lever
2026-09-24 17:09 ` [PATCH v2 14/33] NFSD: Use xdrgen XDR functions for NFSv3 WRITE procedure Chuck Lever
2026-09-24 17:09 ` [PATCH v2 15/33] NFSD: Use xdrgen XDR functions for NFSv3 CREATE procedure Chuck Lever
2026-09-24 17:09 ` [PATCH v2 16/33] NFSD: Use xdrgen XDR functions for NFSv3 MKDIR procedure Chuck Lever
2026-09-24 17:09 ` [PATCH v2 17/33] NFSD: Use xdrgen XDR functions for NFSv3 SYMLINK procedure Chuck Lever
2026-09-24 17:09 ` [PATCH v2 18/33] NFSD: Use xdrgen XDR functions for NFSv3 MKNOD procedure Chuck Lever
2026-09-24 17:09 ` [PATCH v2 19/33] NFSD: Use xdrgen XDR functions for the NFSv3 REMOVE procedure Chuck Lever
2026-09-24 17:09 ` [PATCH v2 20/33] NFSD: Use xdrgen XDR functions for the NFSv3 RMDIR procedure Chuck Lever
2026-09-24 17:10 ` [PATCH v2 21/33] NFSD: Use xdrgen XDR functions for the NFSv3 RENAME procedure Chuck Lever
2026-09-24 17:10 ` [PATCH v2 22/33] NFSD: Use xdrgen XDR functions for the NFSv3 LINK procedure Chuck Lever
2026-09-24 17:10 ` [PATCH v2 23/33] NFSD: Use xdrgen XDR functions for the NFSv3 FSSTAT procedure Chuck Lever
2026-09-24 17:10 ` [PATCH v2 24/33] NFSD: Use xdrgen XDR functions for the NFSv3 FSINFO procedure Chuck Lever
2026-09-24 17:10 ` [PATCH v2 25/33] NFSD: Use xdrgen XDR functions for the NFSv3 PATHCONF procedure Chuck Lever
2026-09-24 17:10 ` [PATCH v2 26/33] NFSD: Use xdrgen XDR functions for the NFSv3 COMMIT procedure Chuck Lever
2026-09-24 17:10 ` [PATCH v2 27/33] NFSD: Use xdrgen XDR functions for NFSv3 READDIR arguments Chuck Lever
2026-09-24 17:10 ` [PATCH v2 28/33] NFSD: Use xdrgen XDR functions for NFSv3 READDIRPLUS arguments Chuck Lever
2026-09-24 17:10 ` [PATCH v2 29/33] NFSD: Refactor NFSv3 directory cookie encoding Chuck Lever
2026-09-24 17:10 ` [PATCH v2 30/33] NFSD: Refactor NFSv3 directory entry encoding Chuck Lever
2026-09-24 17:10 ` [PATCH v2 31/33] NFSD: Split struct nfsd3_readdirres Chuck Lever
2026-09-24 17:10 ` [PATCH v2 32/33] NFSD: Use xdrgen XDR functions for NFSv3 READDIR results Chuck Lever
2026-09-24 17:10 ` [PATCH v2 33/33] NFSD: Use xdrgen XDR functions for NFSv3 READDIRPLUS results Chuck Lever
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=20260924171012.3978-4-cel@kernel.org \
--to=cel@kernel.org \
--cc=dai.ngo@oracle.com \
--cc=jlayton@kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=neil@brown.name \
--cc=okorniev@redhat.com \
--cc=tom@talpey.com \
/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