xref: /linux/fs/nfsd/nfs2xdr_gen.c (revision f08cfa10c4c26daa1fb60dcdf9812a59c3f5f0e5)
1f49b703dSChuck Lever // SPDX-License-Identifier: GPL-2.0
2f49b703dSChuck Lever // Generated by xdrgen. Manual edits will be lost.
3f49b703dSChuck Lever // XDR specification file: ../../Documentation/sunrpc/xdr/nfs2.x
4*f08cfa10SChuck Lever // XDR specification modification time: Tue Sep  8 11:26:28 2026
5f49b703dSChuck Lever 
6f49b703dSChuck Lever #include <linux/sunrpc/svc.h>
7f49b703dSChuck Lever 
8f49b703dSChuck Lever #include "nfs2xdr_gen.h"
9f49b703dSChuck Lever 
10f49b703dSChuck Lever static bool __maybe_unused
11f49b703dSChuck Lever xdrgen_decode_nfsstat(struct xdr_stream *xdr, nfsstat *ptr)
12f49b703dSChuck Lever {
1348e8a88bSChuck Lever 	__be32 raw;
14f49b703dSChuck Lever 	u32 val;
15f49b703dSChuck Lever 
1648e8a88bSChuck Lever 	if (xdr_stream_decode_be32(xdr, &raw) < 0)
17f49b703dSChuck Lever 		return false;
1848e8a88bSChuck Lever 	val = be32_to_cpu(raw);
19f49b703dSChuck Lever 	/* Compiler may optimize to a range check for dense enums */
20f49b703dSChuck Lever 	switch (val) {
21f49b703dSChuck Lever 	case NFS_OK:
22f49b703dSChuck Lever 	case NFSERR_PERM:
23f49b703dSChuck Lever 	case NFSERR_NOENT:
24f49b703dSChuck Lever 	case NFSERR_IO:
25f49b703dSChuck Lever 	case NFSERR_NXIO:
26f49b703dSChuck Lever 	case NFSERR_ACCES:
27f49b703dSChuck Lever 	case NFSERR_EXIST:
28f49b703dSChuck Lever 	case NFSERR_NODEV:
29f49b703dSChuck Lever 	case NFSERR_NOTDIR:
30f49b703dSChuck Lever 	case NFSERR_ISDIR:
31f49b703dSChuck Lever 	case NFSERR_FBIG:
32f49b703dSChuck Lever 	case NFSERR_NOSPC:
33f49b703dSChuck Lever 	case NFSERR_ROFS:
34f49b703dSChuck Lever 	case NFSERR_NAMETOOLONG:
35f49b703dSChuck Lever 	case NFSERR_NOTEMPTY:
36f49b703dSChuck Lever 	case NFSERR_DQUOT:
37f49b703dSChuck Lever 	case NFSERR_STALE:
38f49b703dSChuck Lever 	case NFSERR_WFLUSH:
39f49b703dSChuck Lever 		break;
40f49b703dSChuck Lever 	default:
41f49b703dSChuck Lever 		return false;
42f49b703dSChuck Lever 	}
4348e8a88bSChuck Lever 	*ptr = raw;
44f49b703dSChuck Lever 	return true;
45f49b703dSChuck Lever }
46f49b703dSChuck Lever 
47f49b703dSChuck Lever static bool __maybe_unused
48f49b703dSChuck Lever xdrgen_decode_ftype(struct xdr_stream *xdr, ftype *ptr)
49f49b703dSChuck Lever {
50f49b703dSChuck Lever 	u32 val;
51f49b703dSChuck Lever 
52f49b703dSChuck Lever 	if (xdr_stream_decode_u32(xdr, &val) < 0)
53f49b703dSChuck Lever 		return false;
54f49b703dSChuck Lever 	/* Compiler may optimize to a range check for dense enums */
55f49b703dSChuck Lever 	switch (val) {
56f49b703dSChuck Lever 	case NFNON:
57f49b703dSChuck Lever 	case NFREG:
58f49b703dSChuck Lever 	case NFDIR:
59f49b703dSChuck Lever 	case NFBLK:
60f49b703dSChuck Lever 	case NFCHR:
61f49b703dSChuck Lever 	case NFLNK:
62f49b703dSChuck Lever 		break;
63f49b703dSChuck Lever 	default:
64f49b703dSChuck Lever 		return false;
65f49b703dSChuck Lever 	}
66f49b703dSChuck Lever 	*ptr = val;
67f49b703dSChuck Lever 	return true;
68f49b703dSChuck Lever }
69f49b703dSChuck Lever 
70f49b703dSChuck Lever static bool __maybe_unused
71f49b703dSChuck Lever xdrgen_decode_fhandle(struct xdr_stream *xdr, fhandle *ptr)
72f49b703dSChuck Lever {
73f49b703dSChuck Lever 	return xdr_stream_decode_opaque_fixed(xdr, ptr, NFS_FHSIZE) == 0;
74f49b703dSChuck Lever }
75f49b703dSChuck Lever 
76f49b703dSChuck Lever static bool __maybe_unused
77f49b703dSChuck Lever xdrgen_decode_nfscookie(struct xdr_stream *xdr, nfscookie *ptr)
78f49b703dSChuck Lever {
79f49b703dSChuck Lever 	return xdr_stream_decode_opaque_fixed(xdr, ptr, NFS_COOKIESIZE) == 0;
80f49b703dSChuck Lever }
81f49b703dSChuck Lever 
82f49b703dSChuck Lever static bool __maybe_unused
83f49b703dSChuck Lever xdrgen_decode_timeval(struct xdr_stream *xdr, struct timeval *ptr)
84f49b703dSChuck Lever {
85f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->seconds))
86f49b703dSChuck Lever 		return false;
87f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->useconds))
88f49b703dSChuck Lever 		return false;
89f49b703dSChuck Lever 	return true;
90f49b703dSChuck Lever }
91f49b703dSChuck Lever 
92f49b703dSChuck Lever static bool __maybe_unused
93f49b703dSChuck Lever xdrgen_decode_fattr(struct xdr_stream *xdr, struct fattr *ptr)
94f49b703dSChuck Lever {
95f49b703dSChuck Lever 	if (!xdrgen_decode_ftype(xdr, &ptr->type))
96f49b703dSChuck Lever 		return false;
97f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->mode))
98f49b703dSChuck Lever 		return false;
99f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->nlink))
100f49b703dSChuck Lever 		return false;
101f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->uid))
102f49b703dSChuck Lever 		return false;
103f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->gid))
104f49b703dSChuck Lever 		return false;
105f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->size))
106f49b703dSChuck Lever 		return false;
107f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->blocksize))
108f49b703dSChuck Lever 		return false;
109f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->rdev))
110f49b703dSChuck Lever 		return false;
111f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->blocks))
112f49b703dSChuck Lever 		return false;
113f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->fsid))
114f49b703dSChuck Lever 		return false;
115f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->fileid))
116f49b703dSChuck Lever 		return false;
117f49b703dSChuck Lever 	if (!xdrgen_decode_timeval(xdr, &ptr->atime))
118f49b703dSChuck Lever 		return false;
119f49b703dSChuck Lever 	if (!xdrgen_decode_timeval(xdr, &ptr->mtime))
120f49b703dSChuck Lever 		return false;
121f49b703dSChuck Lever 	if (!xdrgen_decode_timeval(xdr, &ptr->ctime))
122f49b703dSChuck Lever 		return false;
123f49b703dSChuck Lever 	return true;
124f49b703dSChuck Lever }
125f49b703dSChuck Lever 
126f49b703dSChuck Lever static bool __maybe_unused
127f49b703dSChuck Lever xdrgen_decode_sattr(struct xdr_stream *xdr, struct sattr *ptr)
128f49b703dSChuck Lever {
129f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->mode))
130f49b703dSChuck Lever 		return false;
131f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->uid))
132f49b703dSChuck Lever 		return false;
133f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->gid))
134f49b703dSChuck Lever 		return false;
135f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->size))
136f49b703dSChuck Lever 		return false;
137f49b703dSChuck Lever 	if (!xdrgen_decode_timeval(xdr, &ptr->atime))
138f49b703dSChuck Lever 		return false;
139f49b703dSChuck Lever 	if (!xdrgen_decode_timeval(xdr, &ptr->mtime))
140f49b703dSChuck Lever 		return false;
141f49b703dSChuck Lever 	return true;
142f49b703dSChuck Lever }
143f49b703dSChuck Lever 
144f49b703dSChuck Lever static bool __maybe_unused
145f49b703dSChuck Lever xdrgen_decode_filename(struct xdr_stream *xdr, filename *ptr)
146f49b703dSChuck Lever {
147f49b703dSChuck Lever 	return xdrgen_decode_string(xdr, ptr, NFS_MAXNAMLEN);
148f49b703dSChuck Lever }
149f49b703dSChuck Lever 
150f49b703dSChuck Lever static bool __maybe_unused
151f49b703dSChuck Lever xdrgen_decode_path(struct xdr_stream *xdr, path *ptr)
152f49b703dSChuck Lever {
153f49b703dSChuck Lever 	return xdrgen_decode_string(xdr, ptr, NFS_MAXPATHLEN);
154f49b703dSChuck Lever }
155f49b703dSChuck Lever 
156f49b703dSChuck Lever static bool __maybe_unused
157f49b703dSChuck Lever xdrgen_decode_attrstat(struct xdr_stream *xdr, struct attrstat *ptr)
158f49b703dSChuck Lever {
159f49b703dSChuck Lever 	if (!xdrgen_decode_nfsstat(xdr, &ptr->status))
160f49b703dSChuck Lever 		return false;
161f49b703dSChuck Lever 	switch (ptr->status) {
16248e8a88bSChuck Lever 	case __constant_cpu_to_be32(NFS_OK):
163f49b703dSChuck Lever 		if (!xdrgen_decode_fattr(xdr, &ptr->u.attributes))
164f49b703dSChuck Lever 			return false;
165f49b703dSChuck Lever 		break;
166f49b703dSChuck Lever 	default:
167f49b703dSChuck Lever 		break;
168f49b703dSChuck Lever 	}
169f49b703dSChuck Lever 	return true;
170f49b703dSChuck Lever }
171f49b703dSChuck Lever 
172f49b703dSChuck Lever static bool __maybe_unused
173f49b703dSChuck Lever xdrgen_decode_diropargs(struct xdr_stream *xdr, struct diropargs *ptr)
174f49b703dSChuck Lever {
175f49b703dSChuck Lever 	if (!xdrgen_decode_fhandle(xdr, &ptr->dir))
176f49b703dSChuck Lever 		return false;
177f49b703dSChuck Lever 	if (!xdrgen_decode_filename(xdr, &ptr->name))
178f49b703dSChuck Lever 		return false;
179f49b703dSChuck Lever 	return true;
180f49b703dSChuck Lever }
181f49b703dSChuck Lever 
182f49b703dSChuck Lever static bool __maybe_unused
183f49b703dSChuck Lever xdrgen_decode_diropok(struct xdr_stream *xdr, struct diropok *ptr)
184f49b703dSChuck Lever {
185f49b703dSChuck Lever 	if (!xdrgen_decode_fhandle(xdr, &ptr->file))
186f49b703dSChuck Lever 		return false;
187f49b703dSChuck Lever 	if (!xdrgen_decode_fattr(xdr, &ptr->attributes))
188f49b703dSChuck Lever 		return false;
189f49b703dSChuck Lever 	return true;
190f49b703dSChuck Lever }
191f49b703dSChuck Lever 
192f49b703dSChuck Lever static bool __maybe_unused
193f49b703dSChuck Lever xdrgen_decode_diropres(struct xdr_stream *xdr, struct diropres *ptr)
194f49b703dSChuck Lever {
195f49b703dSChuck Lever 	if (!xdrgen_decode_nfsstat(xdr, &ptr->status))
196f49b703dSChuck Lever 		return false;
197f49b703dSChuck Lever 	switch (ptr->status) {
19848e8a88bSChuck Lever 	case __constant_cpu_to_be32(NFS_OK):
199f49b703dSChuck Lever 		if (!xdrgen_decode_diropok(xdr, &ptr->u.diropok))
200f49b703dSChuck Lever 			return false;
201f49b703dSChuck Lever 		break;
202f49b703dSChuck Lever 	default:
203f49b703dSChuck Lever 		break;
204f49b703dSChuck Lever 	}
205f49b703dSChuck Lever 	return true;
206f49b703dSChuck Lever }
207f49b703dSChuck Lever 
208f49b703dSChuck Lever static bool __maybe_unused
209f49b703dSChuck Lever xdrgen_decode_sattrargs(struct xdr_stream *xdr, struct sattrargs *ptr)
210f49b703dSChuck Lever {
211f49b703dSChuck Lever 	if (!xdrgen_decode_fhandle(xdr, &ptr->file))
212f49b703dSChuck Lever 		return false;
213f49b703dSChuck Lever 	if (!xdrgen_decode_sattr(xdr, &ptr->attributes))
214f49b703dSChuck Lever 		return false;
215f49b703dSChuck Lever 	return true;
216f49b703dSChuck Lever }
217f49b703dSChuck Lever 
218f49b703dSChuck Lever static bool __maybe_unused
219f49b703dSChuck Lever xdrgen_decode_readlinkres(struct xdr_stream *xdr, struct readlinkres *ptr)
220f49b703dSChuck Lever {
221f49b703dSChuck Lever 	if (!xdrgen_decode_nfsstat(xdr, &ptr->status))
222f49b703dSChuck Lever 		return false;
223f49b703dSChuck Lever 	switch (ptr->status) {
22448e8a88bSChuck Lever 	case __constant_cpu_to_be32(NFS_OK):
225f49b703dSChuck Lever 		if (!xdrgen_decode_path(xdr, &ptr->u.data))
226f49b703dSChuck Lever 			return false;
227f49b703dSChuck Lever 		break;
228f49b703dSChuck Lever 	default:
229f49b703dSChuck Lever 		break;
230f49b703dSChuck Lever 	}
231f49b703dSChuck Lever 	return true;
232f49b703dSChuck Lever }
233f49b703dSChuck Lever 
234f49b703dSChuck Lever static bool __maybe_unused
235f49b703dSChuck Lever xdrgen_decode_readargs(struct xdr_stream *xdr, struct readargs *ptr)
236f49b703dSChuck Lever {
237f49b703dSChuck Lever 	if (!xdrgen_decode_fhandle(xdr, &ptr->file))
238f49b703dSChuck Lever 		return false;
239f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->offset))
240f49b703dSChuck Lever 		return false;
241f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->count))
242f49b703dSChuck Lever 		return false;
243f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->totalcount))
244f49b703dSChuck Lever 		return false;
245f49b703dSChuck Lever 	return true;
246f49b703dSChuck Lever }
247f49b703dSChuck Lever 
248f49b703dSChuck Lever static bool __maybe_unused
249f49b703dSChuck Lever xdrgen_decode_readresok(struct xdr_stream *xdr, struct readresok *ptr)
250f49b703dSChuck Lever {
251f49b703dSChuck Lever 	if (!xdrgen_decode_fattr(xdr, &ptr->attributes))
252f49b703dSChuck Lever 		return false;
253f49b703dSChuck Lever 	if (!xdrgen_decode_opaque(xdr, &ptr->data, NFS_MAXDATA))
254f49b703dSChuck Lever 		return false;
255f49b703dSChuck Lever 	return true;
256f49b703dSChuck Lever }
257f49b703dSChuck Lever 
258f49b703dSChuck Lever static bool __maybe_unused
259f49b703dSChuck Lever xdrgen_decode_readres(struct xdr_stream *xdr, struct readres *ptr)
260f49b703dSChuck Lever {
261f49b703dSChuck Lever 	if (!xdrgen_decode_nfsstat(xdr, &ptr->status))
262f49b703dSChuck Lever 		return false;
263f49b703dSChuck Lever 	switch (ptr->status) {
26448e8a88bSChuck Lever 	case __constant_cpu_to_be32(NFS_OK):
265f49b703dSChuck Lever 		if (!xdrgen_decode_readresok(xdr, &ptr->u.readresok))
266f49b703dSChuck Lever 			return false;
267f49b703dSChuck Lever 		break;
268f49b703dSChuck Lever 	default:
269f49b703dSChuck Lever 		break;
270f49b703dSChuck Lever 	}
271f49b703dSChuck Lever 	return true;
272f49b703dSChuck Lever }
273f49b703dSChuck Lever 
274f49b703dSChuck Lever static bool __maybe_unused
275f49b703dSChuck Lever xdrgen_decode_writeargs(struct xdr_stream *xdr, struct writeargs *ptr)
276f49b703dSChuck Lever {
277f49b703dSChuck Lever 	if (!xdrgen_decode_fhandle(xdr, &ptr->file))
278f49b703dSChuck Lever 		return false;
279f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->beginoffset))
280f49b703dSChuck Lever 		return false;
281f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->offset))
282f49b703dSChuck Lever 		return false;
283f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->totalcount))
284f49b703dSChuck Lever 		return false;
2857a839d9eSChuck Lever 	if (!svcxdr_decode_opaque_payload(xdr, &ptr->data, NFS_MAXDATA))
286f49b703dSChuck Lever 		return false;
287f49b703dSChuck Lever 	return true;
288f49b703dSChuck Lever }
289f49b703dSChuck Lever 
290f49b703dSChuck Lever static bool __maybe_unused
291f49b703dSChuck Lever xdrgen_decode_createargs(struct xdr_stream *xdr, struct createargs *ptr)
292f49b703dSChuck Lever {
293f49b703dSChuck Lever 	if (!xdrgen_decode_diropargs(xdr, &ptr->where))
294f49b703dSChuck Lever 		return false;
295f49b703dSChuck Lever 	if (!xdrgen_decode_sattr(xdr, &ptr->attributes))
296f49b703dSChuck Lever 		return false;
297f49b703dSChuck Lever 	return true;
298f49b703dSChuck Lever }
299f49b703dSChuck Lever 
300f49b703dSChuck Lever static bool __maybe_unused
301f49b703dSChuck Lever xdrgen_decode_renameargs(struct xdr_stream *xdr, struct renameargs *ptr)
302f49b703dSChuck Lever {
303f49b703dSChuck Lever 	if (!xdrgen_decode_diropargs(xdr, &ptr->from))
304f49b703dSChuck Lever 		return false;
305f49b703dSChuck Lever 	if (!xdrgen_decode_diropargs(xdr, &ptr->to))
306f49b703dSChuck Lever 		return false;
307f49b703dSChuck Lever 	return true;
308f49b703dSChuck Lever }
309f49b703dSChuck Lever 
310f49b703dSChuck Lever static bool __maybe_unused
311f49b703dSChuck Lever xdrgen_decode_linkargs(struct xdr_stream *xdr, struct linkargs *ptr)
312f49b703dSChuck Lever {
313f49b703dSChuck Lever 	if (!xdrgen_decode_fhandle(xdr, &ptr->from))
314f49b703dSChuck Lever 		return false;
315f49b703dSChuck Lever 	if (!xdrgen_decode_diropargs(xdr, &ptr->to))
316f49b703dSChuck Lever 		return false;
317f49b703dSChuck Lever 	return true;
318f49b703dSChuck Lever }
319f49b703dSChuck Lever 
320f49b703dSChuck Lever static bool __maybe_unused
321f49b703dSChuck Lever xdrgen_decode_symlinkargs(struct xdr_stream *xdr, struct symlinkargs *ptr)
322f49b703dSChuck Lever {
323f49b703dSChuck Lever 	if (!xdrgen_decode_diropargs(xdr, &ptr->from))
324f49b703dSChuck Lever 		return false;
325f4a4dbb1SChuck Lever 	if (!svcxdr_decode_opaque_payload(xdr, &ptr->to, NFS_MAXPATHLEN))
326f49b703dSChuck Lever 		return false;
327f49b703dSChuck Lever 	if (!xdrgen_decode_sattr(xdr, &ptr->attributes))
328f49b703dSChuck Lever 		return false;
329f49b703dSChuck Lever 	return true;
330f49b703dSChuck Lever }
331f49b703dSChuck Lever 
332f49b703dSChuck Lever static bool __maybe_unused
333f49b703dSChuck Lever xdrgen_decode_readdirargs(struct xdr_stream *xdr, struct readdirargs *ptr)
334f49b703dSChuck Lever {
335f49b703dSChuck Lever 	if (!xdrgen_decode_fhandle(xdr, &ptr->dir))
336f49b703dSChuck Lever 		return false;
337f49b703dSChuck Lever 	if (!xdrgen_decode_nfscookie(xdr, &ptr->cookie))
338f49b703dSChuck Lever 		return false;
339f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->count))
340f49b703dSChuck Lever 		return false;
341f49b703dSChuck Lever 	return true;
342f49b703dSChuck Lever }
343f49b703dSChuck Lever 
344f49b703dSChuck Lever static bool __maybe_unused
345f49b703dSChuck Lever xdrgen_decode_entry(struct xdr_stream *xdr, struct entry *ptr)
346f49b703dSChuck Lever {
347f49b703dSChuck Lever 	bool opted;
348f49b703dSChuck Lever 
349f49b703dSChuck Lever 	if (!xdrgen_decode_bool(xdr, &opted))
350f49b703dSChuck Lever 		return false;
351f49b703dSChuck Lever 	if (!opted)
352f49b703dSChuck Lever 		return true;
353f49b703dSChuck Lever 
354f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->fileid))
355f49b703dSChuck Lever 		return false;
356f49b703dSChuck Lever 	if (!xdrgen_decode_filename(xdr, &ptr->name))
357f49b703dSChuck Lever 		return false;
358f49b703dSChuck Lever 	if (!xdrgen_decode_nfscookie(xdr, &ptr->cookie))
359f49b703dSChuck Lever 		return false;
360f49b703dSChuck Lever 	return true;
361f49b703dSChuck Lever }
362f49b703dSChuck Lever 
363f49b703dSChuck Lever static bool __maybe_unused
364f49b703dSChuck Lever xdrgen_decode_readdirok(struct xdr_stream *xdr, struct readdirok *ptr)
365f49b703dSChuck Lever {
366f49b703dSChuck Lever 	return false;
367f49b703dSChuck Lever }
368f49b703dSChuck Lever 
369f49b703dSChuck Lever static bool __maybe_unused
370f49b703dSChuck Lever xdrgen_decode_readdirres(struct xdr_stream *xdr, struct readdirres *ptr)
371f49b703dSChuck Lever {
372f49b703dSChuck Lever 	if (!xdrgen_decode_nfsstat(xdr, &ptr->status))
373f49b703dSChuck Lever 		return false;
374f49b703dSChuck Lever 	switch (ptr->status) {
37548e8a88bSChuck Lever 	case __constant_cpu_to_be32(NFS_OK):
376f49b703dSChuck Lever 		if (!xdrgen_decode_readdirok(xdr, &ptr->u.readdirok))
377f49b703dSChuck Lever 			return false;
378f49b703dSChuck Lever 		break;
379f49b703dSChuck Lever 	default:
380f49b703dSChuck Lever 		break;
381f49b703dSChuck Lever 	}
382f49b703dSChuck Lever 	return true;
383f49b703dSChuck Lever }
384f49b703dSChuck Lever 
385f49b703dSChuck Lever static bool __maybe_unused
386f49b703dSChuck Lever xdrgen_decode_info(struct xdr_stream *xdr, struct info *ptr)
387f49b703dSChuck Lever {
388f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->tsize))
389f49b703dSChuck Lever 		return false;
390f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->bsize))
391f49b703dSChuck Lever 		return false;
392f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->blocks))
393f49b703dSChuck Lever 		return false;
394f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->bfree))
395f49b703dSChuck Lever 		return false;
396f49b703dSChuck Lever 	if (!xdrgen_decode_unsigned_int(xdr, &ptr->bavail))
397f49b703dSChuck Lever 		return false;
398f49b703dSChuck Lever 	return true;
399f49b703dSChuck Lever }
400f49b703dSChuck Lever 
401f49b703dSChuck Lever static bool __maybe_unused
402f49b703dSChuck Lever xdrgen_decode_statfsres(struct xdr_stream *xdr, struct statfsres *ptr)
403f49b703dSChuck Lever {
404f49b703dSChuck Lever 	if (!xdrgen_decode_nfsstat(xdr, &ptr->status))
405f49b703dSChuck Lever 		return false;
406f49b703dSChuck Lever 	switch (ptr->status) {
40748e8a88bSChuck Lever 	case __constant_cpu_to_be32(NFS_OK):
408f49b703dSChuck Lever 		if (!xdrgen_decode_info(xdr, &ptr->u.info))
409f49b703dSChuck Lever 			return false;
410f49b703dSChuck Lever 		break;
411f49b703dSChuck Lever 	default:
412f49b703dSChuck Lever 		break;
413f49b703dSChuck Lever 	}
414f49b703dSChuck Lever 	return true;
415f49b703dSChuck Lever }
416f49b703dSChuck Lever 
417f49b703dSChuck Lever /**
418f49b703dSChuck Lever  * nfs_svc_decode_fhandle - Decode a fhandle argument
419f49b703dSChuck Lever  * @rqstp: RPC transaction context
420f49b703dSChuck Lever  * @xdr: source XDR data stream
421f49b703dSChuck Lever  *
422f49b703dSChuck Lever  * Return values:
423f49b703dSChuck Lever  *   %true: procedure arguments decoded successfully
424f49b703dSChuck Lever  *   %false: decode failed
425f49b703dSChuck Lever  */
426f49b703dSChuck Lever bool nfs_svc_decode_fhandle(struct svc_rqst *rqstp, struct xdr_stream *xdr)
427f49b703dSChuck Lever {
428f49b703dSChuck Lever 	fhandle *argp = rqstp->rq_argp;
429f49b703dSChuck Lever 
430f49b703dSChuck Lever 	return xdrgen_decode_fhandle(xdr, argp);
431f49b703dSChuck Lever }
432f49b703dSChuck Lever 
433f49b703dSChuck Lever /**
434f49b703dSChuck Lever  * nfs_svc_decode_sattrargs - Decode a sattrargs argument
435f49b703dSChuck Lever  * @rqstp: RPC transaction context
436f49b703dSChuck Lever  * @xdr: source XDR data stream
437f49b703dSChuck Lever  *
438f49b703dSChuck Lever  * Return values:
439f49b703dSChuck Lever  *   %true: procedure arguments decoded successfully
440f49b703dSChuck Lever  *   %false: decode failed
441f49b703dSChuck Lever  */
442f49b703dSChuck Lever bool nfs_svc_decode_sattrargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
443f49b703dSChuck Lever {
444f49b703dSChuck Lever 	struct sattrargs *argp = rqstp->rq_argp;
445f49b703dSChuck Lever 
446f49b703dSChuck Lever 	return xdrgen_decode_sattrargs(xdr, argp);
447f49b703dSChuck Lever }
448f49b703dSChuck Lever 
449f49b703dSChuck Lever /**
450f49b703dSChuck Lever  * nfs_svc_decode_diropargs - Decode a diropargs argument
451f49b703dSChuck Lever  * @rqstp: RPC transaction context
452f49b703dSChuck Lever  * @xdr: source XDR data stream
453f49b703dSChuck Lever  *
454f49b703dSChuck Lever  * Return values:
455f49b703dSChuck Lever  *   %true: procedure arguments decoded successfully
456f49b703dSChuck Lever  *   %false: decode failed
457f49b703dSChuck Lever  */
458f49b703dSChuck Lever bool nfs_svc_decode_diropargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
459f49b703dSChuck Lever {
460f49b703dSChuck Lever 	struct diropargs *argp = rqstp->rq_argp;
461f49b703dSChuck Lever 
462f49b703dSChuck Lever 	return xdrgen_decode_diropargs(xdr, argp);
463f49b703dSChuck Lever }
464f49b703dSChuck Lever 
465f49b703dSChuck Lever /**
466f49b703dSChuck Lever  * nfs_svc_decode_readargs - Decode a readargs argument
467f49b703dSChuck Lever  * @rqstp: RPC transaction context
468f49b703dSChuck Lever  * @xdr: source XDR data stream
469f49b703dSChuck Lever  *
470f49b703dSChuck Lever  * Return values:
471f49b703dSChuck Lever  *   %true: procedure arguments decoded successfully
472f49b703dSChuck Lever  *   %false: decode failed
473f49b703dSChuck Lever  */
474f49b703dSChuck Lever bool nfs_svc_decode_readargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
475f49b703dSChuck Lever {
476f49b703dSChuck Lever 	struct readargs *argp = rqstp->rq_argp;
477f49b703dSChuck Lever 
478f49b703dSChuck Lever 	return xdrgen_decode_readargs(xdr, argp);
479f49b703dSChuck Lever }
480f49b703dSChuck Lever 
481f49b703dSChuck Lever /**
482f49b703dSChuck Lever  * nfs_svc_decode_writeargs - Decode a writeargs argument
483f49b703dSChuck Lever  * @rqstp: RPC transaction context
484f49b703dSChuck Lever  * @xdr: source XDR data stream
485f49b703dSChuck Lever  *
486f49b703dSChuck Lever  * Return values:
487f49b703dSChuck Lever  *   %true: procedure arguments decoded successfully
488f49b703dSChuck Lever  *   %false: decode failed
489f49b703dSChuck Lever  */
490f49b703dSChuck Lever bool nfs_svc_decode_writeargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
491f49b703dSChuck Lever {
492f49b703dSChuck Lever 	struct writeargs *argp = rqstp->rq_argp;
493f49b703dSChuck Lever 
494f49b703dSChuck Lever 	return xdrgen_decode_writeargs(xdr, argp);
495f49b703dSChuck Lever }
496f49b703dSChuck Lever 
497f49b703dSChuck Lever /**
498f49b703dSChuck Lever  * nfs_svc_decode_createargs - Decode a createargs argument
499f49b703dSChuck Lever  * @rqstp: RPC transaction context
500f49b703dSChuck Lever  * @xdr: source XDR data stream
501f49b703dSChuck Lever  *
502f49b703dSChuck Lever  * Return values:
503f49b703dSChuck Lever  *   %true: procedure arguments decoded successfully
504f49b703dSChuck Lever  *   %false: decode failed
505f49b703dSChuck Lever  */
506f49b703dSChuck Lever bool nfs_svc_decode_createargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
507f49b703dSChuck Lever {
508f49b703dSChuck Lever 	struct createargs *argp = rqstp->rq_argp;
509f49b703dSChuck Lever 
510f49b703dSChuck Lever 	return xdrgen_decode_createargs(xdr, argp);
511f49b703dSChuck Lever }
512f49b703dSChuck Lever 
513f49b703dSChuck Lever /**
514f49b703dSChuck Lever  * nfs_svc_decode_renameargs - Decode a renameargs argument
515f49b703dSChuck Lever  * @rqstp: RPC transaction context
516f49b703dSChuck Lever  * @xdr: source XDR data stream
517f49b703dSChuck Lever  *
518f49b703dSChuck Lever  * Return values:
519f49b703dSChuck Lever  *   %true: procedure arguments decoded successfully
520f49b703dSChuck Lever  *   %false: decode failed
521f49b703dSChuck Lever  */
522f49b703dSChuck Lever bool nfs_svc_decode_renameargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
523f49b703dSChuck Lever {
524f49b703dSChuck Lever 	struct renameargs *argp = rqstp->rq_argp;
525f49b703dSChuck Lever 
526f49b703dSChuck Lever 	return xdrgen_decode_renameargs(xdr, argp);
527f49b703dSChuck Lever }
528f49b703dSChuck Lever 
529f49b703dSChuck Lever /**
530f49b703dSChuck Lever  * nfs_svc_decode_linkargs - Decode a linkargs argument
531f49b703dSChuck Lever  * @rqstp: RPC transaction context
532f49b703dSChuck Lever  * @xdr: source XDR data stream
533f49b703dSChuck Lever  *
534f49b703dSChuck Lever  * Return values:
535f49b703dSChuck Lever  *   %true: procedure arguments decoded successfully
536f49b703dSChuck Lever  *   %false: decode failed
537f49b703dSChuck Lever  */
538f49b703dSChuck Lever bool nfs_svc_decode_linkargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
539f49b703dSChuck Lever {
540f49b703dSChuck Lever 	struct linkargs *argp = rqstp->rq_argp;
541f49b703dSChuck Lever 
542f49b703dSChuck Lever 	return xdrgen_decode_linkargs(xdr, argp);
543f49b703dSChuck Lever }
544f49b703dSChuck Lever 
545f49b703dSChuck Lever /**
546f49b703dSChuck Lever  * nfs_svc_decode_symlinkargs - Decode a symlinkargs argument
547f49b703dSChuck Lever  * @rqstp: RPC transaction context
548f49b703dSChuck Lever  * @xdr: source XDR data stream
549f49b703dSChuck Lever  *
550f49b703dSChuck Lever  * Return values:
551f49b703dSChuck Lever  *   %true: procedure arguments decoded successfully
552f49b703dSChuck Lever  *   %false: decode failed
553f49b703dSChuck Lever  */
554f49b703dSChuck Lever bool nfs_svc_decode_symlinkargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
555f49b703dSChuck Lever {
556f49b703dSChuck Lever 	struct symlinkargs *argp = rqstp->rq_argp;
557f49b703dSChuck Lever 
558f49b703dSChuck Lever 	return xdrgen_decode_symlinkargs(xdr, argp);
559f49b703dSChuck Lever }
560f49b703dSChuck Lever 
561f49b703dSChuck Lever /**
562f49b703dSChuck Lever  * nfs_svc_decode_readdirargs - Decode a readdirargs argument
563f49b703dSChuck Lever  * @rqstp: RPC transaction context
564f49b703dSChuck Lever  * @xdr: source XDR data stream
565f49b703dSChuck Lever  *
566f49b703dSChuck Lever  * Return values:
567f49b703dSChuck Lever  *   %true: procedure arguments decoded successfully
568f49b703dSChuck Lever  *   %false: decode failed
569f49b703dSChuck Lever  */
570f49b703dSChuck Lever bool nfs_svc_decode_readdirargs(struct svc_rqst *rqstp, struct xdr_stream *xdr)
571f49b703dSChuck Lever {
572f49b703dSChuck Lever 	struct readdirargs *argp = rqstp->rq_argp;
573f49b703dSChuck Lever 
574f49b703dSChuck Lever 	return xdrgen_decode_readdirargs(xdr, argp);
575f49b703dSChuck Lever }
576f49b703dSChuck Lever 
577f49b703dSChuck Lever static bool __maybe_unused
578f49b703dSChuck Lever xdrgen_encode_nfsstat(struct xdr_stream *xdr, nfsstat value)
579f49b703dSChuck Lever {
58048e8a88bSChuck Lever 	return xdr_stream_encode_be32(xdr, value) == XDR_UNIT;
581f49b703dSChuck Lever }
582f49b703dSChuck Lever 
583f49b703dSChuck Lever static bool __maybe_unused
584f49b703dSChuck Lever xdrgen_encode_ftype(struct xdr_stream *xdr, ftype value)
585f49b703dSChuck Lever {
586f49b703dSChuck Lever 	return xdr_stream_encode_u32(xdr, value) == XDR_UNIT;
587f49b703dSChuck Lever }
588f49b703dSChuck Lever 
589f49b703dSChuck Lever static bool __maybe_unused
590f49b703dSChuck Lever xdrgen_encode_fhandle(struct xdr_stream *xdr, const fhandle value)
591f49b703dSChuck Lever {
592f49b703dSChuck Lever 	return xdr_stream_encode_opaque_fixed(xdr, value, NFS_FHSIZE) >= 0;
593f49b703dSChuck Lever }
594f49b703dSChuck Lever 
595f49b703dSChuck Lever static bool __maybe_unused
596f49b703dSChuck Lever xdrgen_encode_nfscookie(struct xdr_stream *xdr, const nfscookie value)
597f49b703dSChuck Lever {
598f49b703dSChuck Lever 	return xdr_stream_encode_opaque_fixed(xdr, value, NFS_COOKIESIZE) >= 0;
599f49b703dSChuck Lever }
600f49b703dSChuck Lever 
601f49b703dSChuck Lever static bool __maybe_unused
602f49b703dSChuck Lever xdrgen_encode_timeval(struct xdr_stream *xdr, const struct timeval *value)
603f49b703dSChuck Lever {
604f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->seconds))
605f49b703dSChuck Lever 		return false;
606f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->useconds))
607f49b703dSChuck Lever 		return false;
608f49b703dSChuck Lever 	return true;
609f49b703dSChuck Lever }
610f49b703dSChuck Lever 
611f49b703dSChuck Lever static bool __maybe_unused
612f49b703dSChuck Lever xdrgen_encode_fattr(struct xdr_stream *xdr, const struct fattr *value)
613f49b703dSChuck Lever {
614f49b703dSChuck Lever 	if (!xdrgen_encode_ftype(xdr, value->type))
615f49b703dSChuck Lever 		return false;
616f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->mode))
617f49b703dSChuck Lever 		return false;
618f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->nlink))
619f49b703dSChuck Lever 		return false;
620f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->uid))
621f49b703dSChuck Lever 		return false;
622f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->gid))
623f49b703dSChuck Lever 		return false;
624f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->size))
625f49b703dSChuck Lever 		return false;
626f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->blocksize))
627f49b703dSChuck Lever 		return false;
628f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->rdev))
629f49b703dSChuck Lever 		return false;
630f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->blocks))
631f49b703dSChuck Lever 		return false;
632f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->fsid))
633f49b703dSChuck Lever 		return false;
634f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->fileid))
635f49b703dSChuck Lever 		return false;
636f49b703dSChuck Lever 	if (!xdrgen_encode_timeval(xdr, &value->atime))
637f49b703dSChuck Lever 		return false;
638f49b703dSChuck Lever 	if (!xdrgen_encode_timeval(xdr, &value->mtime))
639f49b703dSChuck Lever 		return false;
640f49b703dSChuck Lever 	if (!xdrgen_encode_timeval(xdr, &value->ctime))
641f49b703dSChuck Lever 		return false;
642f49b703dSChuck Lever 	return true;
643f49b703dSChuck Lever }
644f49b703dSChuck Lever 
645f49b703dSChuck Lever static bool __maybe_unused
646f49b703dSChuck Lever xdrgen_encode_sattr(struct xdr_stream *xdr, const struct sattr *value)
647f49b703dSChuck Lever {
648f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->mode))
649f49b703dSChuck Lever 		return false;
650f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->uid))
651f49b703dSChuck Lever 		return false;
652f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->gid))
653f49b703dSChuck Lever 		return false;
654f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->size))
655f49b703dSChuck Lever 		return false;
656f49b703dSChuck Lever 	if (!xdrgen_encode_timeval(xdr, &value->atime))
657f49b703dSChuck Lever 		return false;
658f49b703dSChuck Lever 	if (!xdrgen_encode_timeval(xdr, &value->mtime))
659f49b703dSChuck Lever 		return false;
660f49b703dSChuck Lever 	return true;
661f49b703dSChuck Lever }
662f49b703dSChuck Lever 
663f49b703dSChuck Lever static bool __maybe_unused
664f49b703dSChuck Lever xdrgen_encode_filename(struct xdr_stream *xdr, const filename value)
665f49b703dSChuck Lever {
666f49b703dSChuck Lever 	return xdr_stream_encode_opaque(xdr, value.data, value.len) >= 0;
667f49b703dSChuck Lever }
668f49b703dSChuck Lever 
669f49b703dSChuck Lever static bool __maybe_unused
670f49b703dSChuck Lever xdrgen_encode_path(struct xdr_stream *xdr, const path value)
671f49b703dSChuck Lever {
672f49b703dSChuck Lever 	return xdr_stream_encode_opaque(xdr, value.data, value.len) >= 0;
673f49b703dSChuck Lever }
674f49b703dSChuck Lever 
675f49b703dSChuck Lever static bool __maybe_unused
676f49b703dSChuck Lever xdrgen_encode_attrstat(struct xdr_stream *xdr, const struct attrstat *ptr)
677f49b703dSChuck Lever {
678f49b703dSChuck Lever 	if (!xdrgen_encode_nfsstat(xdr, ptr->status))
679f49b703dSChuck Lever 		return false;
680f49b703dSChuck Lever 	switch (ptr->status) {
68148e8a88bSChuck Lever 	case __constant_cpu_to_be32(NFS_OK):
682f49b703dSChuck Lever 		if (!xdrgen_encode_fattr(xdr, &ptr->u.attributes))
683f49b703dSChuck Lever 			return false;
684f49b703dSChuck Lever 		break;
685f49b703dSChuck Lever 	default:
686f49b703dSChuck Lever 		break;
687f49b703dSChuck Lever 	}
688f49b703dSChuck Lever 	return true;
689f49b703dSChuck Lever }
690f49b703dSChuck Lever 
691f49b703dSChuck Lever static bool __maybe_unused
692f49b703dSChuck Lever xdrgen_encode_diropargs(struct xdr_stream *xdr, const struct diropargs *value)
693f49b703dSChuck Lever {
694f49b703dSChuck Lever 	if (!xdrgen_encode_fhandle(xdr, value->dir))
695f49b703dSChuck Lever 		return false;
696f49b703dSChuck Lever 	if (!xdrgen_encode_filename(xdr, value->name))
697f49b703dSChuck Lever 		return false;
698f49b703dSChuck Lever 	return true;
699f49b703dSChuck Lever }
700f49b703dSChuck Lever 
701f49b703dSChuck Lever static bool __maybe_unused
702f49b703dSChuck Lever xdrgen_encode_diropok(struct xdr_stream *xdr, const struct diropok *value)
703f49b703dSChuck Lever {
704f49b703dSChuck Lever 	if (!xdrgen_encode_fhandle(xdr, value->file))
705f49b703dSChuck Lever 		return false;
706f49b703dSChuck Lever 	if (!xdrgen_encode_fattr(xdr, &value->attributes))
707f49b703dSChuck Lever 		return false;
708f49b703dSChuck Lever 	return true;
709f49b703dSChuck Lever }
710f49b703dSChuck Lever 
711f49b703dSChuck Lever static bool __maybe_unused
712f49b703dSChuck Lever xdrgen_encode_diropres(struct xdr_stream *xdr, const struct diropres *ptr)
713f49b703dSChuck Lever {
714f49b703dSChuck Lever 	if (!xdrgen_encode_nfsstat(xdr, ptr->status))
715f49b703dSChuck Lever 		return false;
716f49b703dSChuck Lever 	switch (ptr->status) {
71748e8a88bSChuck Lever 	case __constant_cpu_to_be32(NFS_OK):
718f49b703dSChuck Lever 		if (!xdrgen_encode_diropok(xdr, &ptr->u.diropok))
719f49b703dSChuck Lever 			return false;
720f49b703dSChuck Lever 		break;
721f49b703dSChuck Lever 	default:
722f49b703dSChuck Lever 		break;
723f49b703dSChuck Lever 	}
724f49b703dSChuck Lever 	return true;
725f49b703dSChuck Lever }
726f49b703dSChuck Lever 
727f49b703dSChuck Lever static bool __maybe_unused
728f49b703dSChuck Lever xdrgen_encode_sattrargs(struct xdr_stream *xdr, const struct sattrargs *value)
729f49b703dSChuck Lever {
730f49b703dSChuck Lever 	if (!xdrgen_encode_fhandle(xdr, value->file))
731f49b703dSChuck Lever 		return false;
732f49b703dSChuck Lever 	if (!xdrgen_encode_sattr(xdr, &value->attributes))
733f49b703dSChuck Lever 		return false;
734f49b703dSChuck Lever 	return true;
735f49b703dSChuck Lever }
736f49b703dSChuck Lever 
737f49b703dSChuck Lever static bool __maybe_unused
738f49b703dSChuck Lever xdrgen_encode_readlinkres(struct xdr_stream *xdr, const struct readlinkres *ptr)
739f49b703dSChuck Lever {
740f49b703dSChuck Lever 	if (!xdrgen_encode_nfsstat(xdr, ptr->status))
741f49b703dSChuck Lever 		return false;
742f49b703dSChuck Lever 	switch (ptr->status) {
74348e8a88bSChuck Lever 	case __constant_cpu_to_be32(NFS_OK):
744781dbb8aSChuck Lever 		if (ptr->u.data.len > NFS_MAXPATHLEN)
745781dbb8aSChuck Lever 			return false;
746781dbb8aSChuck Lever 		if (!svcxdr_encode_opaque_payload(xdr, ptr->u.data.len))
747f49b703dSChuck Lever 			return false;
748f49b703dSChuck Lever 		break;
749f49b703dSChuck Lever 	default:
750f49b703dSChuck Lever 		break;
751f49b703dSChuck Lever 	}
752f49b703dSChuck Lever 	return true;
753f49b703dSChuck Lever }
754f49b703dSChuck Lever 
755f49b703dSChuck Lever static bool __maybe_unused
756f49b703dSChuck Lever xdrgen_encode_readargs(struct xdr_stream *xdr, const struct readargs *value)
757f49b703dSChuck Lever {
758f49b703dSChuck Lever 	if (!xdrgen_encode_fhandle(xdr, value->file))
759f49b703dSChuck Lever 		return false;
760f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->offset))
761f49b703dSChuck Lever 		return false;
762f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->count))
763f49b703dSChuck Lever 		return false;
764f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->totalcount))
765f49b703dSChuck Lever 		return false;
766f49b703dSChuck Lever 	return true;
767f49b703dSChuck Lever }
768f49b703dSChuck Lever 
769f49b703dSChuck Lever static bool __maybe_unused
770f49b703dSChuck Lever xdrgen_encode_readresok(struct xdr_stream *xdr, const struct readresok *value)
771f49b703dSChuck Lever {
772f49b703dSChuck Lever 	if (!xdrgen_encode_fattr(xdr, &value->attributes))
773f49b703dSChuck Lever 		return false;
774f49b703dSChuck Lever 	if (value->data.len > NFS_MAXDATA)
775f49b703dSChuck Lever 		return false;
7764a814c45SChuck Lever 	if (!svcxdr_encode_opaque_payload(xdr, value->data.len))
777f49b703dSChuck Lever 		return false;
778f49b703dSChuck Lever 	return true;
779f49b703dSChuck Lever }
780f49b703dSChuck Lever 
781f49b703dSChuck Lever static bool __maybe_unused
782f49b703dSChuck Lever xdrgen_encode_readres(struct xdr_stream *xdr, const struct readres *ptr)
783f49b703dSChuck Lever {
784f49b703dSChuck Lever 	if (!xdrgen_encode_nfsstat(xdr, ptr->status))
785f49b703dSChuck Lever 		return false;
786f49b703dSChuck Lever 	switch (ptr->status) {
78748e8a88bSChuck Lever 	case __constant_cpu_to_be32(NFS_OK):
788f49b703dSChuck Lever 		if (!xdrgen_encode_readresok(xdr, &ptr->u.readresok))
789f49b703dSChuck Lever 			return false;
790f49b703dSChuck Lever 		break;
791f49b703dSChuck Lever 	default:
792f49b703dSChuck Lever 		break;
793f49b703dSChuck Lever 	}
794f49b703dSChuck Lever 	return true;
795f49b703dSChuck Lever }
796f49b703dSChuck Lever 
797f49b703dSChuck Lever static bool __maybe_unused
798f49b703dSChuck Lever xdrgen_encode_writeargs(struct xdr_stream *xdr, const struct writeargs *value)
799f49b703dSChuck Lever {
800f49b703dSChuck Lever 	if (!xdrgen_encode_fhandle(xdr, value->file))
801f49b703dSChuck Lever 		return false;
802f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->beginoffset))
803f49b703dSChuck Lever 		return false;
804f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->offset))
805f49b703dSChuck Lever 		return false;
806f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->totalcount))
807f49b703dSChuck Lever 		return false;
808f49b703dSChuck Lever 	if (value->data.len > NFS_MAXDATA)
809f49b703dSChuck Lever 		return false;
8107a839d9eSChuck Lever 	if (!svcxdr_encode_opaque_payload(xdr, value->data.len))
811f49b703dSChuck Lever 		return false;
812f49b703dSChuck Lever 	return true;
813f49b703dSChuck Lever }
814f49b703dSChuck Lever 
815f49b703dSChuck Lever static bool __maybe_unused
816f49b703dSChuck Lever xdrgen_encode_createargs(struct xdr_stream *xdr, const struct createargs *value)
817f49b703dSChuck Lever {
818f49b703dSChuck Lever 	if (!xdrgen_encode_diropargs(xdr, &value->where))
819f49b703dSChuck Lever 		return false;
820f49b703dSChuck Lever 	if (!xdrgen_encode_sattr(xdr, &value->attributes))
821f49b703dSChuck Lever 		return false;
822f49b703dSChuck Lever 	return true;
823f49b703dSChuck Lever }
824f49b703dSChuck Lever 
825f49b703dSChuck Lever static bool __maybe_unused
826f49b703dSChuck Lever xdrgen_encode_renameargs(struct xdr_stream *xdr, const struct renameargs *value)
827f49b703dSChuck Lever {
828f49b703dSChuck Lever 	if (!xdrgen_encode_diropargs(xdr, &value->from))
829f49b703dSChuck Lever 		return false;
830f49b703dSChuck Lever 	if (!xdrgen_encode_diropargs(xdr, &value->to))
831f49b703dSChuck Lever 		return false;
832f49b703dSChuck Lever 	return true;
833f49b703dSChuck Lever }
834f49b703dSChuck Lever 
835f49b703dSChuck Lever static bool __maybe_unused
836f49b703dSChuck Lever xdrgen_encode_linkargs(struct xdr_stream *xdr, const struct linkargs *value)
837f49b703dSChuck Lever {
838f49b703dSChuck Lever 	if (!xdrgen_encode_fhandle(xdr, value->from))
839f49b703dSChuck Lever 		return false;
840f49b703dSChuck Lever 	if (!xdrgen_encode_diropargs(xdr, &value->to))
841f49b703dSChuck Lever 		return false;
842f49b703dSChuck Lever 	return true;
843f49b703dSChuck Lever }
844f49b703dSChuck Lever 
845f49b703dSChuck Lever static bool __maybe_unused
846f49b703dSChuck Lever xdrgen_encode_symlinkargs(struct xdr_stream *xdr, const struct symlinkargs *value)
847f49b703dSChuck Lever {
848f49b703dSChuck Lever 	if (!xdrgen_encode_diropargs(xdr, &value->from))
849f49b703dSChuck Lever 		return false;
850f4a4dbb1SChuck Lever 	if (value->to.len > NFS_MAXPATHLEN)
851f4a4dbb1SChuck Lever 		return false;
852f4a4dbb1SChuck Lever 	if (!svcxdr_encode_opaque_payload(xdr, value->to.len))
853f49b703dSChuck Lever 		return false;
854f49b703dSChuck Lever 	if (!xdrgen_encode_sattr(xdr, &value->attributes))
855f49b703dSChuck Lever 		return false;
856f49b703dSChuck Lever 	return true;
857f49b703dSChuck Lever }
858f49b703dSChuck Lever 
859f49b703dSChuck Lever static bool __maybe_unused
860f49b703dSChuck Lever xdrgen_encode_readdirargs(struct xdr_stream *xdr, const struct readdirargs *value)
861f49b703dSChuck Lever {
862f49b703dSChuck Lever 	if (!xdrgen_encode_fhandle(xdr, value->dir))
863f49b703dSChuck Lever 		return false;
864f49b703dSChuck Lever 	if (!xdrgen_encode_nfscookie(xdr, value->cookie))
865f49b703dSChuck Lever 		return false;
866f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->count))
867f49b703dSChuck Lever 		return false;
868f49b703dSChuck Lever 	return true;
869f49b703dSChuck Lever }
870f49b703dSChuck Lever 
871f49b703dSChuck Lever static bool __maybe_unused
872f49b703dSChuck Lever xdrgen_encode_entry(struct xdr_stream *xdr, const struct entry *value)
873f49b703dSChuck Lever {
874f49b703dSChuck Lever 	if (!xdrgen_encode_bool(xdr, value != NULL))
875f49b703dSChuck Lever 		return false;
876f49b703dSChuck Lever 	if (!value)
877f49b703dSChuck Lever 		return true;
878f49b703dSChuck Lever 
879f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->fileid))
880f49b703dSChuck Lever 		return false;
881f49b703dSChuck Lever 	if (!xdrgen_encode_filename(xdr, value->name))
882f49b703dSChuck Lever 		return false;
883f49b703dSChuck Lever 	if (!xdrgen_encode_nfscookie(xdr, value->cookie))
884f49b703dSChuck Lever 		return false;
885f49b703dSChuck Lever 	return true;
886f49b703dSChuck Lever }
887f49b703dSChuck Lever 
888f49b703dSChuck Lever static bool __maybe_unused
889f49b703dSChuck Lever xdrgen_encode_readdirok(struct xdr_stream *xdr, const struct readdirok *value)
890f49b703dSChuck Lever {
891*f08cfa10SChuck Lever 	{
892*f08cfa10SChuck Lever 		struct xdrgen_aggregate_cursor cursor = {
893*f08cfa10SChuck Lever 			.xdr = xdr,
894*f08cfa10SChuck Lever 			.member_id = NFS2_READDIROK_ENTRIES,
895*f08cfa10SChuck Lever 			.ctx = xdr->xdrgen_ctx,
896*f08cfa10SChuck Lever 		};
897*f08cfa10SChuck Lever 		bool ok = true;
898*f08cfa10SChuck Lever 
899*f08cfa10SChuck Lever 		if (!nfs2_readdirok_encode_begin(&cursor))
900f49b703dSChuck Lever 			return false;
901*f08cfa10SChuck Lever 		for (cursor.index = 0; ; cursor.index++) {
902*f08cfa10SChuck Lever 			struct entry element = {};
903*f08cfa10SChuck Lever 
904*f08cfa10SChuck Lever 			if (!nfs2_readdirok_encode(&cursor, &element))
905*f08cfa10SChuck Lever 				break;
906*f08cfa10SChuck Lever 			if (!xdrgen_encode_entry(xdr, &element)) {
907*f08cfa10SChuck Lever 				ok = false;
908*f08cfa10SChuck Lever 				break;
909*f08cfa10SChuck Lever 			}
910*f08cfa10SChuck Lever 		}
911*f08cfa10SChuck Lever 		if (ok && !xdrgen_encode_entry(xdr, NULL))
912*f08cfa10SChuck Lever 			ok = false;
913*f08cfa10SChuck Lever 		if (!nfs2_readdirok_encode_end(&cursor, ok) || !ok)
914*f08cfa10SChuck Lever 			return false;
915*f08cfa10SChuck Lever 	}
916f49b703dSChuck Lever 	if (!xdrgen_encode_bool(xdr, value->eof))
917f49b703dSChuck Lever 		return false;
918f49b703dSChuck Lever 	return true;
919f49b703dSChuck Lever }
920f49b703dSChuck Lever 
921f49b703dSChuck Lever static bool __maybe_unused
922f49b703dSChuck Lever xdrgen_encode_readdirres(struct xdr_stream *xdr, const struct readdirres *ptr)
923f49b703dSChuck Lever {
924f49b703dSChuck Lever 	if (!xdrgen_encode_nfsstat(xdr, ptr->status))
925f49b703dSChuck Lever 		return false;
926f49b703dSChuck Lever 	switch (ptr->status) {
92748e8a88bSChuck Lever 	case __constant_cpu_to_be32(NFS_OK):
928f49b703dSChuck Lever 		if (!xdrgen_encode_readdirok(xdr, &ptr->u.readdirok))
929f49b703dSChuck Lever 			return false;
930f49b703dSChuck Lever 		break;
931f49b703dSChuck Lever 	default:
932f49b703dSChuck Lever 		break;
933f49b703dSChuck Lever 	}
934f49b703dSChuck Lever 	return true;
935f49b703dSChuck Lever }
936f49b703dSChuck Lever 
937f49b703dSChuck Lever static bool __maybe_unused
938f49b703dSChuck Lever xdrgen_encode_info(struct xdr_stream *xdr, const struct info *value)
939f49b703dSChuck Lever {
940f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->tsize))
941f49b703dSChuck Lever 		return false;
942f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->bsize))
943f49b703dSChuck Lever 		return false;
944f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->blocks))
945f49b703dSChuck Lever 		return false;
946f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->bfree))
947f49b703dSChuck Lever 		return false;
948f49b703dSChuck Lever 	if (!xdrgen_encode_unsigned_int(xdr, value->bavail))
949f49b703dSChuck Lever 		return false;
950f49b703dSChuck Lever 	return true;
951f49b703dSChuck Lever }
952f49b703dSChuck Lever 
953f49b703dSChuck Lever static bool __maybe_unused
954f49b703dSChuck Lever xdrgen_encode_statfsres(struct xdr_stream *xdr, const struct statfsres *ptr)
955f49b703dSChuck Lever {
956f49b703dSChuck Lever 	if (!xdrgen_encode_nfsstat(xdr, ptr->status))
957f49b703dSChuck Lever 		return false;
958f49b703dSChuck Lever 	switch (ptr->status) {
95948e8a88bSChuck Lever 	case __constant_cpu_to_be32(NFS_OK):
960f49b703dSChuck Lever 		if (!xdrgen_encode_info(xdr, &ptr->u.info))
961f49b703dSChuck Lever 			return false;
962f49b703dSChuck Lever 		break;
963f49b703dSChuck Lever 	default:
964f49b703dSChuck Lever 		break;
965f49b703dSChuck Lever 	}
966f49b703dSChuck Lever 	return true;
967f49b703dSChuck Lever }
968f49b703dSChuck Lever 
969f49b703dSChuck Lever /**
970f49b703dSChuck Lever  * nfs_svc_encode_attrstat - Encode a attrstat result
971f49b703dSChuck Lever  * @rqstp: RPC transaction context
972f49b703dSChuck Lever  * @xdr: target XDR data stream
973f49b703dSChuck Lever  *
974f49b703dSChuck Lever  * Return values:
975f49b703dSChuck Lever  *   %true: procedure results encoded successfully
976f49b703dSChuck Lever  *   %false: encode failed
977f49b703dSChuck Lever  */
978f49b703dSChuck Lever bool nfs_svc_encode_attrstat(struct svc_rqst *rqstp, struct xdr_stream *xdr)
979f49b703dSChuck Lever {
980f49b703dSChuck Lever 	struct attrstat *resp = rqstp->rq_resp;
981f49b703dSChuck Lever 
982f49b703dSChuck Lever 	return xdrgen_encode_attrstat(xdr, resp);
983f49b703dSChuck Lever }
984f49b703dSChuck Lever 
985f49b703dSChuck Lever /**
986f49b703dSChuck Lever  * nfs_svc_encode_diropres - Encode a diropres result
987f49b703dSChuck Lever  * @rqstp: RPC transaction context
988f49b703dSChuck Lever  * @xdr: target XDR data stream
989f49b703dSChuck Lever  *
990f49b703dSChuck Lever  * Return values:
991f49b703dSChuck Lever  *   %true: procedure results encoded successfully
992f49b703dSChuck Lever  *   %false: encode failed
993f49b703dSChuck Lever  */
994f49b703dSChuck Lever bool nfs_svc_encode_diropres(struct svc_rqst *rqstp, struct xdr_stream *xdr)
995f49b703dSChuck Lever {
996f49b703dSChuck Lever 	struct diropres *resp = rqstp->rq_resp;
997f49b703dSChuck Lever 
998f49b703dSChuck Lever 	return xdrgen_encode_diropres(xdr, resp);
999f49b703dSChuck Lever }
1000f49b703dSChuck Lever 
1001f49b703dSChuck Lever /**
1002f49b703dSChuck Lever  * nfs_svc_encode_readlinkres - Encode a readlinkres result
1003f49b703dSChuck Lever  * @rqstp: RPC transaction context
1004f49b703dSChuck Lever  * @xdr: target XDR data stream
1005f49b703dSChuck Lever  *
1006f49b703dSChuck Lever  * Return values:
1007f49b703dSChuck Lever  *   %true: procedure results encoded successfully
1008f49b703dSChuck Lever  *   %false: encode failed
1009f49b703dSChuck Lever  */
1010f49b703dSChuck Lever bool nfs_svc_encode_readlinkres(struct svc_rqst *rqstp, struct xdr_stream *xdr)
1011f49b703dSChuck Lever {
1012f49b703dSChuck Lever 	struct readlinkres *resp = rqstp->rq_resp;
1013f49b703dSChuck Lever 
1014f49b703dSChuck Lever 	return xdrgen_encode_readlinkres(xdr, resp);
1015f49b703dSChuck Lever }
1016f49b703dSChuck Lever 
1017f49b703dSChuck Lever /**
1018f49b703dSChuck Lever  * nfs_svc_encode_readres - Encode a readres result
1019f49b703dSChuck Lever  * @rqstp: RPC transaction context
1020f49b703dSChuck Lever  * @xdr: target XDR data stream
1021f49b703dSChuck Lever  *
1022f49b703dSChuck Lever  * Return values:
1023f49b703dSChuck Lever  *   %true: procedure results encoded successfully
1024f49b703dSChuck Lever  *   %false: encode failed
1025f49b703dSChuck Lever  */
1026f49b703dSChuck Lever bool nfs_svc_encode_readres(struct svc_rqst *rqstp, struct xdr_stream *xdr)
1027f49b703dSChuck Lever {
1028f49b703dSChuck Lever 	struct readres *resp = rqstp->rq_resp;
1029f49b703dSChuck Lever 
1030f49b703dSChuck Lever 	return xdrgen_encode_readres(xdr, resp);
1031f49b703dSChuck Lever }
1032f49b703dSChuck Lever 
1033f49b703dSChuck Lever /**
1034f49b703dSChuck Lever  * nfs_svc_encode_nfsstat - Encode a nfsstat result
1035f49b703dSChuck Lever  * @rqstp: RPC transaction context
1036f49b703dSChuck Lever  * @xdr: target XDR data stream
1037f49b703dSChuck Lever  *
1038f49b703dSChuck Lever  * Return values:
1039f49b703dSChuck Lever  *   %true: procedure results encoded successfully
1040f49b703dSChuck Lever  *   %false: encode failed
1041f49b703dSChuck Lever  */
1042f49b703dSChuck Lever bool nfs_svc_encode_nfsstat(struct svc_rqst *rqstp, struct xdr_stream *xdr)
1043f49b703dSChuck Lever {
1044f49b703dSChuck Lever 	nfsstat *resp = rqstp->rq_resp;
1045f49b703dSChuck Lever 
1046f49b703dSChuck Lever 	return xdrgen_encode_nfsstat(xdr, *resp);
1047f49b703dSChuck Lever }
1048f49b703dSChuck Lever 
1049f49b703dSChuck Lever /**
1050f49b703dSChuck Lever  * nfs_svc_encode_readdirres - Encode a readdirres result
1051f49b703dSChuck Lever  * @rqstp: RPC transaction context
1052f49b703dSChuck Lever  * @xdr: target XDR data stream
1053f49b703dSChuck Lever  *
1054f49b703dSChuck Lever  * Return values:
1055f49b703dSChuck Lever  *   %true: procedure results encoded successfully
1056f49b703dSChuck Lever  *   %false: encode failed
1057f49b703dSChuck Lever  */
1058f49b703dSChuck Lever bool nfs_svc_encode_readdirres(struct svc_rqst *rqstp, struct xdr_stream *xdr)
1059f49b703dSChuck Lever {
1060f49b703dSChuck Lever 	struct readdirres *resp = rqstp->rq_resp;
1061f49b703dSChuck Lever 
1062f49b703dSChuck Lever 	return xdrgen_encode_readdirres(xdr, resp);
1063f49b703dSChuck Lever }
1064f49b703dSChuck Lever 
1065f49b703dSChuck Lever /**
1066f49b703dSChuck Lever  * nfs_svc_encode_statfsres - Encode a statfsres result
1067f49b703dSChuck Lever  * @rqstp: RPC transaction context
1068f49b703dSChuck Lever  * @xdr: target XDR data stream
1069f49b703dSChuck Lever  *
1070f49b703dSChuck Lever  * Return values:
1071f49b703dSChuck Lever  *   %true: procedure results encoded successfully
1072f49b703dSChuck Lever  *   %false: encode failed
1073f49b703dSChuck Lever  */
1074f49b703dSChuck Lever bool nfs_svc_encode_statfsres(struct svc_rqst *rqstp, struct xdr_stream *xdr)
1075f49b703dSChuck Lever {
1076f49b703dSChuck Lever 	struct statfsres *resp = rqstp->rq_resp;
1077f49b703dSChuck Lever 
1078f49b703dSChuck Lever 	return xdrgen_encode_statfsres(xdr, resp);
1079f49b703dSChuck Lever }
1080