Lines Matching +full:is +full:- +full:decoded +full:- +full:cs

1 // SPDX-License-Identifier: GPL-2.0
9 * 04 Aug 1998 Ion Badulescu <ionut@cs.columbia.edu>
35 * number of 32bit-words
76 * functions. For run-time efficiency, some data types are encoded
77 * or decoded inline.
82 if (clnt && clnt->cl_cred) in rpc_userns()
83 return clnt->cl_cred->user_ns; in rpc_userns()
89 if (rqstp->rq_task) in rpc_rqst_userns()
90 return rpc_userns(rqstp->rq_task->tk_client); in rpc_rqst_userns()
104 return -EIO; in decode_nfsdata()
110 result->eof = 0; /* NFSv2 does not pass EOF flag on the wire. */ in decode_nfsdata()
111 result->count = count; in decode_nfsdata()
148 return -EIO; in decode_stat()
190 memcpy(p, fh->data, NFS2_FHSIZE); in encode_fhandle()
199 return -EIO; in decode_fhandle()
200 fh->size = NFS2_FHSIZE; in decode_fhandle()
201 memcpy(fh->data, p, NFS2_FHSIZE); in decode_fhandle()
215 *p++ = cpu_to_be32((u32)timep->tv_sec); in xdr_encode_time()
216 if (timep->tv_nsec != 0) in xdr_encode_time()
217 *p++ = cpu_to_be32(timep->tv_nsec / NSEC_PER_USEC); in xdr_encode_time()
224 * Passing the invalid value useconds=1000000 is a Sun convention for
228 * Illustrated" by Brent Callaghan, Addison-Wesley, ISBN 0-201-32750-5.
233 *p++ = cpu_to_be32(timep->tv_sec); in xdr_encode_current_server_time()
240 timep->tv_sec = be32_to_cpup(p++); in xdr_decode_time()
241 timep->tv_nsec = be32_to_cpup(p++) * NSEC_PER_USEC; in xdr_decode_time()
274 return -EIO; in decode_fattr()
276 fattr->valid |= NFS_ATTR_FATTR_V2; in decode_fattr()
280 fattr->mode = be32_to_cpup(p++); in decode_fattr()
281 fattr->nlink = be32_to_cpup(p++); in decode_fattr()
282 fattr->uid = make_kuid(userns, be32_to_cpup(p++)); in decode_fattr()
283 if (!uid_valid(fattr->uid)) in decode_fattr()
285 fattr->gid = make_kgid(userns, be32_to_cpup(p++)); in decode_fattr()
286 if (!gid_valid(fattr->gid)) in decode_fattr()
289 fattr->size = be32_to_cpup(p++); in decode_fattr()
290 fattr->du.nfs2.blocksize = be32_to_cpup(p++); in decode_fattr()
293 fattr->rdev = new_decode_dev(rdev); in decode_fattr()
295 fattr->mode = (fattr->mode & ~S_IFMT) | S_IFIFO; in decode_fattr()
296 fattr->rdev = 0; in decode_fattr()
299 fattr->du.nfs2.blocks = be32_to_cpup(p++); in decode_fattr()
300 fattr->fsid.major = be32_to_cpup(p++); in decode_fattr()
301 fattr->fsid.minor = 0; in decode_fattr()
302 fattr->fileid = be32_to_cpup(p++); in decode_fattr()
304 p = xdr_decode_time(p, &fattr->atime); in decode_fattr()
305 p = xdr_decode_time(p, &fattr->mtime); in decode_fattr()
306 xdr_decode_time(p, &fattr->ctime); in decode_fattr()
307 fattr->change_attr = nfs_timespec_to_change_attr(&fattr->ctime); in decode_fattr()
312 return -EINVAL; in decode_fattr()
315 return -EINVAL; in decode_fattr()
347 if (attr->ia_valid & ATTR_MODE) in encode_sattr()
348 *p++ = cpu_to_be32(attr->ia_mode); in encode_sattr()
351 if (attr->ia_valid & ATTR_UID) in encode_sattr()
352 *p++ = cpu_to_be32(from_kuid_munged(userns, attr->ia_uid)); in encode_sattr()
355 if (attr->ia_valid & ATTR_GID) in encode_sattr()
356 *p++ = cpu_to_be32(from_kgid_munged(userns, attr->ia_gid)); in encode_sattr()
359 if (attr->ia_valid & ATTR_SIZE) in encode_sattr()
360 *p++ = cpu_to_be32((u32)attr->ia_size); in encode_sattr()
364 if (attr->ia_valid & ATTR_ATIME_SET) in encode_sattr()
365 p = xdr_encode_time(p, &attr->ia_atime); in encode_sattr()
366 else if (attr->ia_valid & ATTR_ATIME) in encode_sattr()
367 p = xdr_encode_current_server_time(p, &attr->ia_atime); in encode_sattr()
370 if (attr->ia_valid & ATTR_MTIME_SET) in encode_sattr()
371 xdr_encode_time(p, &attr->ia_mtime); in encode_sattr()
372 else if (attr->ia_valid & ATTR_MTIME) in encode_sattr()
373 xdr_encode_current_server_time(p, &attr->ia_mtime); in encode_sattr()
401 return -EIO; in decode_filename_inline()
407 return -EIO; in decode_filename_inline()
413 return -ENAMETOOLONG; in decode_filename_inline()
437 return -EIO; in decode_path()
439 if (unlikely(length >= xdr->buf->page_len || length > NFS_MAXPATHLEN)) in decode_path()
444 xdr_terminate_string(xdr->buf, length); in decode_path()
448 return -ENAMETOOLONG; in decode_path()
452 return -EIO; in decode_path()
519 error = decode_fhandle(xdr, result->fh); in decode_diropok()
522 error = decode_fattr(xdr, result->fattr, userns); in decode_diropok()
576 encode_fhandle(xdr, args->fh); in nfs2_xdr_enc_sattrargs()
577 encode_sattr(xdr, args->sattr, rpc_rqst_userns(req)); in nfs2_xdr_enc_sattrargs()
586 encode_diropargs(xdr, args->fh, args->name, args->len); in nfs2_xdr_enc_diropargs()
595 encode_fhandle(xdr, args->fh); in nfs2_xdr_enc_readlinkargs()
596 rpc_prepare_reply_pages(req, args->pages, args->pgbase, args->pglen, in nfs2_xdr_enc_readlinkargs()
597 NFS_readlinkres_sz - NFS_pagepad_sz); in nfs2_xdr_enc_readlinkargs()
613 u32 offset = args->offset; in encode_readargs()
614 u32 count = args->count; in encode_readargs()
617 encode_fhandle(xdr, args->fh); in encode_readargs()
632 rpc_prepare_reply_pages(req, args->pages, args->pgbase, args->count, in nfs2_xdr_enc_readargs()
633 NFS_readres_sz - NFS_pagepad_sz); in nfs2_xdr_enc_readargs()
634 req->rq_rcv_buf.flags |= XDRBUF_READ; in nfs2_xdr_enc_readargs()
651 u32 offset = args->offset; in encode_writeargs()
652 u32 count = args->count; in encode_writeargs()
655 encode_fhandle(xdr, args->fh); in encode_writeargs()
664 xdr_write_pages(xdr, args->pages, args->pgbase, count); in encode_writeargs()
674 xdr->buf->flags |= XDRBUF_WRITE; in nfs2_xdr_enc_writeargs()
691 encode_diropargs(xdr, args->fh, args->name, args->len); in nfs2_xdr_enc_createargs()
692 encode_sattr(xdr, args->sattr, rpc_rqst_userns(req)); in nfs2_xdr_enc_createargs()
701 encode_diropargs(xdr, args->fh, args->name.name, args->name.len); in nfs2_xdr_enc_removeargs()
717 const struct qstr *old = args->old_name; in nfs2_xdr_enc_renameargs()
718 const struct qstr *new = args->new_name; in nfs2_xdr_enc_renameargs()
720 encode_diropargs(xdr, args->old_dir, old->name, old->len); in nfs2_xdr_enc_renameargs()
721 encode_diropargs(xdr, args->new_dir, new->name, new->len); in nfs2_xdr_enc_renameargs()
738 encode_fhandle(xdr, args->fromfh); in nfs2_xdr_enc_linkargs()
739 encode_diropargs(xdr, args->tofh, args->toname, args->tolen); in nfs2_xdr_enc_linkargs()
757 encode_diropargs(xdr, args->fromfh, args->fromname, args->fromlen); in nfs2_xdr_enc_symlinkargs()
758 encode_path(xdr, args->pages, args->pathlen); in nfs2_xdr_enc_symlinkargs()
759 encode_sattr(xdr, args->sattr, rpc_rqst_userns(req)); in nfs2_xdr_enc_symlinkargs()
776 encode_fhandle(xdr, args->fh); in encode_readdirargs()
779 *p++ = cpu_to_be32(args->cookie); in encode_readdirargs()
780 *p = cpu_to_be32(args->count); in encode_readdirargs()
790 rpc_prepare_reply_pages(req, args->pages, 0, args->count, in nfs2_xdr_enc_readdirargs()
791 NFS_readdirres_sz - NFS_pagepad_sz); in nfs2_xdr_enc_readdirargs()
879 result->op_status = status; in nfs2_xdr_dec_readres()
882 error = decode_fattr(xdr, result->fattr, rpc_rqst_userns(req)); in nfs2_xdr_dec_readres()
898 result->verf->committed = NFS_FILE_SYNC; in nfs2_xdr_dec_writeres()
899 return decode_attrstat(xdr, result->fattr, &result->op_status, in nfs2_xdr_dec_writeres()
904 * nfs2_decode_dirent - Decode a single NFSv2 directory entry stored in
910 * Returns zero if successful, otherwise a negative errno value is
913 * This function is not invoked during READDIR reply decoding, but
934 return -EAGAIN; in nfs2_decode_dirent()
938 return -EAGAIN; in nfs2_decode_dirent()
940 return -EAGAIN; in nfs2_decode_dirent()
941 entry->eof = 1; in nfs2_decode_dirent()
942 return -EBADCOOKIE; in nfs2_decode_dirent()
947 return -EAGAIN; in nfs2_decode_dirent()
948 entry->ino = be32_to_cpup(p); in nfs2_decode_dirent()
950 error = decode_filename_inline(xdr, &entry->name, &entry->len); in nfs2_decode_dirent()
952 return error == -ENAMETOOLONG ? -ENAMETOOLONG : -EAGAIN; in nfs2_decode_dirent()
960 return -EAGAIN; in nfs2_decode_dirent()
961 entry->cookie = be32_to_cpup(p); in nfs2_decode_dirent()
963 entry->d_type = DT_UNKNOWN; in nfs2_decode_dirent()
982 * touch them. The actual decoding is done by nfs2_decode_dirent()
987 return xdr_read_pages(xdr, xdr->buf->page_len); in decode_readdirok()
1030 return -EIO; in decode_info()
1031 result->tsize = be32_to_cpup(p++); in decode_info()
1032 result->bsize = be32_to_cpup(p++); in decode_info()
1033 result->blocks = be32_to_cpup(p++); in decode_info()
1034 result->bfree = be32_to_cpup(p++); in decode_info()
1035 result->bavail = be32_to_cpup(p); in decode_info()
1067 { NFSERR_PERM, -EPERM },
1068 { NFSERR_NOENT, -ENOENT },
1069 { NFSERR_IO, -errno_NFSERR_IO},
1070 { NFSERR_NXIO, -ENXIO },
1071 /* { NFSERR_EAGAIN, -EAGAIN }, */
1072 { NFSERR_ACCES, -EACCES },
1073 { NFSERR_EXIST, -EEXIST },
1074 { NFSERR_XDEV, -EXDEV },
1075 { NFSERR_NODEV, -ENODEV },
1076 { NFSERR_NOTDIR, -ENOTDIR },
1077 { NFSERR_ISDIR, -EISDIR },
1078 { NFSERR_INVAL, -EINVAL },
1079 { NFSERR_FBIG, -EFBIG },
1080 { NFSERR_NOSPC, -ENOSPC },
1081 { NFSERR_ROFS, -EROFS },
1082 { NFSERR_MLINK, -EMLINK },
1083 { NFSERR_NAMETOOLONG, -ENAMETOOLONG },
1084 { NFSERR_NOTEMPTY, -ENOTEMPTY },
1085 { NFSERR_DQUOT, -EDQUOT },
1086 { NFSERR_STALE, -ESTALE },
1087 { NFSERR_REMOTE, -EREMOTE },
1089 { NFSERR_WFLUSH, -EWFLUSH },
1091 { NFSERR_BADHANDLE, -EBADHANDLE },
1092 { NFSERR_NOT_SYNC, -ENOTSYNC },
1093 { NFSERR_BAD_COOKIE, -EBADCOOKIE },
1094 { NFSERR_NOTSUPP, -ENOTSUPP },
1095 { NFSERR_TOOSMALL, -ETOOSMALL },
1096 { NFSERR_SERVERFAULT, -EREMOTEIO },
1097 { NFSERR_BADTYPE, -EBADTYPE },
1098 { NFSERR_JUKEBOX, -EJUKEBOX },
1099 { -1, -EIO }
1103 * nfs_stat_to_errno - convert an NFS status code to a local errno
1106 * Returns a local errno value, or -EIO if the NFS status code is
1107 * not recognized. This function is used jointly by NFSv2 and NFSv3.
1113 for (i = 0; nfs_errtbl[i].stat != -1; i++) { in nfs_stat_to_errno()