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>
33 * number of 32bit-words
72 * functions. For run-time efficiency, some data types are encoded
73 * or decoded inline.
78 if (clnt && clnt->cl_cred) in rpc_userns()
79 return clnt->cl_cred->user_ns; in rpc_userns()
85 if (rqstp->rq_task) in rpc_rqst_userns()
86 return rpc_userns(rqstp->rq_task->tk_client); in rpc_rqst_userns()
100 return -EIO; in decode_nfsdata()
106 result->eof = 0; /* NFSv2 does not pass EOF flag on the wire. */ in decode_nfsdata()
107 result->count = count; in decode_nfsdata()
144 return -EIO; in decode_stat()
186 memcpy(p, fh->data, NFS2_FHSIZE); in encode_fhandle()
195 return -EIO; in decode_fhandle()
196 fh->size = NFS2_FHSIZE; in decode_fhandle()
197 memcpy(fh->data, p, NFS2_FHSIZE); in decode_fhandle()
211 *p++ = cpu_to_be32((u32)timep->tv_sec); in xdr_encode_time()
212 if (timep->tv_nsec != 0) in xdr_encode_time()
213 *p++ = cpu_to_be32(timep->tv_nsec / NSEC_PER_USEC); in xdr_encode_time()
220 * Passing the invalid value useconds=1000000 is a Sun convention for
224 * Illustrated" by Brent Callaghan, Addison-Wesley, ISBN 0-201-32750-5.
229 *p++ = cpu_to_be32(timep->tv_sec); in xdr_encode_current_server_time()
236 timep->tv_sec = be32_to_cpup(p++); in xdr_decode_time()
237 timep->tv_nsec = be32_to_cpup(p++) * NSEC_PER_USEC; in xdr_decode_time()
270 return -EIO; in decode_fattr()
272 fattr->valid |= NFS_ATTR_FATTR_V2; in decode_fattr()
276 fattr->mode = be32_to_cpup(p++); in decode_fattr()
277 fattr->nlink = be32_to_cpup(p++); in decode_fattr()
278 fattr->uid = make_kuid(userns, be32_to_cpup(p++)); in decode_fattr()
279 if (!uid_valid(fattr->uid)) in decode_fattr()
281 fattr->gid = make_kgid(userns, be32_to_cpup(p++)); in decode_fattr()
282 if (!gid_valid(fattr->gid)) in decode_fattr()
285 fattr->size = be32_to_cpup(p++); in decode_fattr()
286 fattr->du.nfs2.blocksize = be32_to_cpup(p++); in decode_fattr()
289 fattr->rdev = new_decode_dev(rdev); in decode_fattr()
291 fattr->mode = (fattr->mode & ~S_IFMT) | S_IFIFO; in decode_fattr()
292 fattr->rdev = 0; in decode_fattr()
295 fattr->du.nfs2.blocks = be32_to_cpup(p++); in decode_fattr()
296 fattr->fsid.major = be32_to_cpup(p++); in decode_fattr()
297 fattr->fsid.minor = 0; in decode_fattr()
298 fattr->fileid = be32_to_cpup(p++); in decode_fattr()
300 p = xdr_decode_time(p, &fattr->atime); in decode_fattr()
301 p = xdr_decode_time(p, &fattr->mtime); in decode_fattr()
302 xdr_decode_time(p, &fattr->ctime); in decode_fattr()
303 fattr->change_attr = nfs_timespec_to_change_attr(&fattr->ctime); in decode_fattr()
308 return -EINVAL; in decode_fattr()
311 return -EINVAL; in decode_fattr()
343 if (attr->ia_valid & ATTR_MODE) in encode_sattr()
344 *p++ = cpu_to_be32(attr->ia_mode); in encode_sattr()
347 if (attr->ia_valid & ATTR_UID) in encode_sattr()
348 *p++ = cpu_to_be32(from_kuid_munged(userns, attr->ia_uid)); in encode_sattr()
351 if (attr->ia_valid & ATTR_GID) in encode_sattr()
352 *p++ = cpu_to_be32(from_kgid_munged(userns, attr->ia_gid)); in encode_sattr()
355 if (attr->ia_valid & ATTR_SIZE) in encode_sattr()
356 *p++ = cpu_to_be32((u32)attr->ia_size); in encode_sattr()
360 if (attr->ia_valid & ATTR_ATIME_SET) in encode_sattr()
361 p = xdr_encode_time(p, &attr->ia_atime); in encode_sattr()
362 else if (attr->ia_valid & ATTR_ATIME) in encode_sattr()
363 p = xdr_encode_current_server_time(p, &attr->ia_atime); in encode_sattr()
366 if (attr->ia_valid & ATTR_MTIME_SET) in encode_sattr()
367 xdr_encode_time(p, &attr->ia_mtime); in encode_sattr()
368 else if (attr->ia_valid & ATTR_MTIME) in encode_sattr()
369 xdr_encode_current_server_time(p, &attr->ia_mtime); in encode_sattr()
397 return -EIO; in decode_filename_inline()
403 return -EIO; in decode_filename_inline()
409 return -ENAMETOOLONG; in decode_filename_inline()
433 return -EIO; in decode_path()
435 if (unlikely(length >= xdr->buf->page_len || length > NFS_MAXPATHLEN)) in decode_path()
440 xdr_terminate_string(xdr->buf, length); in decode_path()
444 return -ENAMETOOLONG; in decode_path()
448 return -EIO; in decode_path()
515 error = decode_fhandle(xdr, result->fh); in decode_diropok()
518 error = decode_fattr(xdr, result->fattr, userns); in decode_diropok()
572 encode_fhandle(xdr, args->fh); in nfs2_xdr_enc_sattrargs()
573 encode_sattr(xdr, args->sattr, rpc_rqst_userns(req)); in nfs2_xdr_enc_sattrargs()
582 encode_diropargs(xdr, args->fh, args->name, args->len); in nfs2_xdr_enc_diropargs()
591 encode_fhandle(xdr, args->fh); in nfs2_xdr_enc_readlinkargs()
592 rpc_prepare_reply_pages(req, args->pages, args->pgbase, args->pglen, in nfs2_xdr_enc_readlinkargs()
593 NFS_readlinkres_sz - NFS_pagepad_sz); in nfs2_xdr_enc_readlinkargs()
609 u32 offset = args->offset; in encode_readargs()
610 u32 count = args->count; in encode_readargs()
613 encode_fhandle(xdr, args->fh); in encode_readargs()
628 rpc_prepare_reply_pages(req, args->pages, args->pgbase, args->count, in nfs2_xdr_enc_readargs()
629 NFS_readres_sz - NFS_pagepad_sz); in nfs2_xdr_enc_readargs()
630 req->rq_rcv_buf.flags |= XDRBUF_READ; in nfs2_xdr_enc_readargs()
647 u32 offset = args->offset; in encode_writeargs()
648 u32 count = args->count; in encode_writeargs()
651 encode_fhandle(xdr, args->fh); in encode_writeargs()
660 xdr_write_pages(xdr, args->pages, args->pgbase, count); in encode_writeargs()
670 xdr->buf->flags |= XDRBUF_WRITE; in nfs2_xdr_enc_writeargs()
687 encode_diropargs(xdr, args->fh, args->name, args->len); in nfs2_xdr_enc_createargs()
688 encode_sattr(xdr, args->sattr, rpc_rqst_userns(req)); in nfs2_xdr_enc_createargs()
697 encode_diropargs(xdr, args->fh, args->name.name, args->name.len); in nfs2_xdr_enc_removeargs()
713 const struct qstr *old = args->old_name; in nfs2_xdr_enc_renameargs()
714 const struct qstr *new = args->new_name; in nfs2_xdr_enc_renameargs()
716 encode_diropargs(xdr, args->old_dir, old->name, old->len); in nfs2_xdr_enc_renameargs()
717 encode_diropargs(xdr, args->new_dir, new->name, new->len); in nfs2_xdr_enc_renameargs()
734 encode_fhandle(xdr, args->fromfh); in nfs2_xdr_enc_linkargs()
735 encode_diropargs(xdr, args->tofh, args->toname, args->tolen); in nfs2_xdr_enc_linkargs()
753 encode_diropargs(xdr, args->fromfh, args->fromname, args->fromlen); in nfs2_xdr_enc_symlinkargs()
754 encode_path(xdr, args->pages, args->pathlen); in nfs2_xdr_enc_symlinkargs()
755 encode_sattr(xdr, args->sattr, rpc_rqst_userns(req)); in nfs2_xdr_enc_symlinkargs()
772 encode_fhandle(xdr, args->fh); in encode_readdirargs()
775 *p++ = cpu_to_be32(args->cookie); in encode_readdirargs()
776 *p = cpu_to_be32(args->count); in encode_readdirargs()
786 rpc_prepare_reply_pages(req, args->pages, 0, args->count, in nfs2_xdr_enc_readdirargs()
787 NFS_readdirres_sz - NFS_pagepad_sz); in nfs2_xdr_enc_readdirargs()
875 result->op_status = status; in nfs2_xdr_dec_readres()
878 error = decode_fattr(xdr, result->fattr, rpc_rqst_userns(req)); in nfs2_xdr_dec_readres()
894 result->verf->committed = NFS_FILE_SYNC; in nfs2_xdr_dec_writeres()
895 return decode_attrstat(xdr, result->fattr, &result->op_status, in nfs2_xdr_dec_writeres()
900 * nfs2_decode_dirent - Decode a single NFSv2 directory entry stored in
906 * Returns zero if successful, otherwise a negative errno value is
909 * This function is not invoked during READDIR reply decoding, but
930 return -EAGAIN; in nfs2_decode_dirent()
934 return -EAGAIN; in nfs2_decode_dirent()
936 return -EAGAIN; in nfs2_decode_dirent()
937 entry->eof = 1; in nfs2_decode_dirent()
938 return -EBADCOOKIE; in nfs2_decode_dirent()
943 return -EAGAIN; in nfs2_decode_dirent()
944 entry->ino = be32_to_cpup(p); in nfs2_decode_dirent()
946 error = decode_filename_inline(xdr, &entry->name, &entry->len); in nfs2_decode_dirent()
948 return error == -ENAMETOOLONG ? -ENAMETOOLONG : -EAGAIN; in nfs2_decode_dirent()
956 return -EAGAIN; in nfs2_decode_dirent()
957 entry->cookie = be32_to_cpup(p); in nfs2_decode_dirent()
959 entry->d_type = DT_UNKNOWN; in nfs2_decode_dirent()
978 * touch them. The actual decoding is done by nfs2_decode_dirent()
983 return xdr_read_pages(xdr, xdr->buf->page_len); in decode_readdirok()
1026 return -EIO; in decode_info()
1027 result->tsize = be32_to_cpup(p++); in decode_info()
1028 result->bsize = be32_to_cpup(p++); in decode_info()
1029 result->blocks = be32_to_cpup(p++); in decode_info()
1030 result->bfree = be32_to_cpup(p++); in decode_info()
1031 result->bavail = be32_to_cpup(p); in decode_info()