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