int nfs3svc_decode_linkargs(struct svc_rqst *rqstp, u32 *p, struct nfsd3_linkargs *args) { if (!(p = decode_fh(p, &args->ffh)) || !(p = decode_fh(p, &args->tfh)) || !(p = decode_filename(p, &args->tname, &args->tlen))) return 0; return xdr_argsize_check(rqstp, p); }
int nfssvc_decode_renameargs(struct svc_rqst *rqstp, __be32 *p, struct nfsd_renameargs *args) { if (!(p = decode_fh(p, &args->ffh)) || !(p = decode_filename(p, &args->fname, &args->flen)) || !(p = decode_fh(p, &args->tfh)) || !(p = decode_filename(p, &args->tname, &args->tlen))) return 0; return xdr_argsize_check(rqstp, p); }
int nfssvc_decode_linkargs(struct svc_rqst *rqstp, __be32 *p) { struct nfsd_linkargs *args = rqstp->rq_argp; if (!(p = decode_fh(p, &args->ffh)) || !(p = decode_fh(p, &args->tfh)) || !(p = decode_filename(p, &args->tname, &args->tlen))) return 0; return xdr_argsize_check(rqstp, p); }
int nfssvc_decode_readargs(struct svc_rqst *rqstp, __be32 *p) { struct nfsd_readargs *args = rqstp->rq_argp; unsigned int len; int v; p = decode_fh(p, &args->fh); if (!p) return 0; args->offset = ntohl(*p++); len = args->count = ntohl(*p++); p++; /* totalcount - unused */ len = min_t(unsigned int, len, NFSSVC_MAXBLKSIZE_V2); /* set up somewhere to store response. * We take pages, put them on reslist and include in iovec */ v=0; while (len > 0) { struct page *p = *(rqstp->rq_next_page++); rqstp->rq_vec[v].iov_base = page_address(p); rqstp->rq_vec[v].iov_len = min_t(unsigned int, len, PAGE_SIZE); len -= rqstp->rq_vec[v].iov_len; v++; } args->vlen = v; return xdr_argsize_check(rqstp, p); }
int nfssvc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p, struct nfsd_writeargs *args) { unsigned int len; int v; if (!(p = decode_fh(p, &args->fh))) return 0; p++; /* beginoffset */ args->offset = ntohl(*p++); /* offset */ p++; /* totalcount */ len = args->len = ntohl(*p++); rqstp->rq_vec[0].iov_base = (void*)p; rqstp->rq_vec[0].iov_len = rqstp->rq_arg.head[0].iov_len - (((void*)p) - rqstp->rq_arg.head[0].iov_base); if (len > NFSSVC_MAXBLKSIZE_V2) len = NFSSVC_MAXBLKSIZE_V2; v = 0; while (len > rqstp->rq_vec[v].iov_len) { len -= rqstp->rq_vec[v].iov_len; v++; rqstp->rq_vec[v].iov_base = page_address(rqstp->rq_pages[v]); rqstp->rq_vec[v].iov_len = PAGE_SIZE; } rqstp->rq_vec[v].iov_len = len; args->vlen = v+1; return rqstp->rq_vec[0].iov_len > 0; }
int nfssvc_decode_readargs(struct svc_rqst *rqstp, __be32 *p, struct nfsd_readargs *args) { unsigned int len; int v,pn; if (!(p = decode_fh(p, &args->fh))) return 0; args->offset = ntohl(*p++); len = args->count = ntohl(*p++); p++; if (len > NFSSVC_MAXBLKSIZE_V2) len = NFSSVC_MAXBLKSIZE_V2; v=0; while (len > 0) { pn = rqstp->rq_resused++; rqstp->rq_vec[v].iov_base = page_address(rqstp->rq_respages[pn]); rqstp->rq_vec[v].iov_len = len < PAGE_SIZE?len:PAGE_SIZE; len -= rqstp->rq_vec[v].iov_len; v++; } args->vlen = v; return xdr_argsize_check(rqstp, p); }
int nfssvc_decode_fhandle(struct svc_rqst *rqstp, __be32 *p, struct nfsd_fhandle *args) { if (!(p = decode_fh(p, &args->fh))) return 0; return xdr_argsize_check(rqstp, p); }
int nfssvc_decode_readargs(struct svc_rqst *rqstp, __be32 *p, struct nfsd_readargs *args) { unsigned int len; int v,pn; if (!(p = decode_fh(p, &args->fh))) return 0; args->offset = ntohl(*p++); len = args->count = ntohl(*p++); p++; /* totalcount - unused */ if (len > NFSSVC_MAXBLKSIZE_V2) len = NFSSVC_MAXBLKSIZE_V2; /* set up somewhere to store response. * We take pages, put them on reslist and include in iovec */ v=0; while (len > 0) { pn = rqstp->rq_resused++; rqstp->rq_vec[v].iov_base = page_address(rqstp->rq_respages[pn]); rqstp->rq_vec[v].iov_len = len < PAGE_SIZE?len:PAGE_SIZE; len -= rqstp->rq_vec[v].iov_len; v++; } args->vlen = v; return xdr_argsize_check(rqstp, p); }
int nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, __be32 *p) { struct nfsd3_readdirargs *args = rqstp->rq_argp; int len; u32 max_blocksize = svc_max_payload(rqstp); p = decode_fh(p, &args->fh); if (!p) return 0; p = xdr_decode_hyper(p, &args->cookie); args->verf = p; p += 2; args->dircount = ntohl(*p++); args->count = ntohl(*p++); len = args->count = min(args->count, max_blocksize); while (len > 0) { struct page *p = *(rqstp->rq_next_page++); if (!args->buffer) args->buffer = page_address(p); len -= PAGE_SIZE; } return xdr_argsize_check(rqstp, p); }
int nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p) { struct nfsd3_readargs *args = rqstp->rq_argp; unsigned int len; int v; u32 max_blocksize = svc_max_payload(rqstp); p = decode_fh(p, &args->fh); if (!p) return 0; p = xdr_decode_hyper(p, &args->offset); args->count = ntohl(*p++); len = min(args->count, max_blocksize); /* set up the kvec */ v=0; while (len > 0) { struct page *p = *(rqstp->rq_next_page++); rqstp->rq_vec[v].iov_base = page_address(p); rqstp->rq_vec[v].iov_len = min_t(unsigned int, len, PAGE_SIZE); len -= rqstp->rq_vec[v].iov_len; v++; } args->vlen = v; return xdr_argsize_check(rqstp, p); }
/* * XDR decode functions */ int nfs3svc_decode_fhandle(struct svc_rqst *rqstp, u32 *p, struct svc_fh *fhp) { if (!(p = decode_fh(p, fhp))) return 0; return xdr_argsize_check(rqstp, p); }
static __be32 decode_layoutrecall_args(struct svc_rqst *rqstp, struct xdr_stream *xdr, struct cb_layoutrecallargs *args) { __be32 *p; __be32 status = 0; uint32_t iomode; args->cbl_addr = svc_addr(rqstp); p = read_buf(xdr, 4 * sizeof(uint32_t)); if (unlikely(p == NULL)) { status = htonl(NFS4ERR_BADXDR); goto out; } args->cbl_layout_type = ntohl(*p++); /* Depite the spec's xdr, iomode really belongs in the FILE switch, * as it is unusable and ignored with the other types. */ iomode = ntohl(*p++); args->cbl_layoutchanged = ntohl(*p++); args->cbl_recall_type = ntohl(*p++); if (args->cbl_recall_type == RETURN_FILE) { args->cbl_range.iomode = iomode; status = decode_fh(xdr, &args->cbl_fh); if (unlikely(status != 0)) goto out; p = read_buf(xdr, 2 * sizeof(uint64_t)); if (unlikely(p == NULL)) { status = htonl(NFS4ERR_BADXDR); goto out; } p = xdr_decode_hyper(p, &args->cbl_range.offset); p = xdr_decode_hyper(p, &args->cbl_range.length); status = decode_stateid(xdr, &args->cbl_stateid); if (unlikely(status != 0)) goto out; } else if (args->cbl_recall_type == RETURN_FSID) { p = read_buf(xdr, 2 * sizeof(uint64_t)); if (unlikely(p == NULL)) { status = htonl(NFS4ERR_BADXDR); goto out; } p = xdr_decode_hyper(p, &args->cbl_fsid.major); p = xdr_decode_hyper(p, &args->cbl_fsid.minor); } else if (args->cbl_recall_type != RETURN_ALL) { status = htonl(NFS4ERR_BADXDR); goto out; } dprintk("%s: ltype 0x%x iomode %d changed %d recall_type %d\n", __func__, args->cbl_layout_type, iomode, args->cbl_layoutchanged, args->cbl_recall_type); out: dprintk("%s: exit with status = %d\n", __func__, ntohl(status)); return status; }
int nfssvc_decode_readlinkargs(struct svc_rqst *rqstp, __be32 *p, struct nfsd_readlinkargs *args) { if (!(p = decode_fh(p, &args->fh))) return 0; args->buffer = page_address(rqstp->rq_respages[rqstp->rq_resused++]); return xdr_argsize_check(rqstp, p); }
int nfssvc_decode_fhandle(struct svc_rqst *rqstp, __be32 *p) { struct nfsd_fhandle *args = rqstp->rq_argp; p = decode_fh(p, &args->fh); if (!p) return 0; return xdr_argsize_check(rqstp, p); }
int nfssvc_decode_readlinkargs(struct svc_rqst *rqstp, __be32 *p, struct nfsd_readlinkargs *args) { p = decode_fh(p, &args->fh); if (!p) return 0; args->buffer = page_address(*(rqstp->rq_next_page++)); return xdr_argsize_check(rqstp, p); }
int nfs3svc_decode_accessargs(struct svc_rqst *rqstp, u32 *p, struct nfsd3_accessargs *args) { if (!(p = decode_fh(p, &args->fh))) return 0; args->access = ntohl(*p++); return xdr_argsize_check(rqstp, p); }
int nfssvc_decode_diropargs(struct svc_rqst *rqstp, __be32 *p, struct nfsd_diropargs *args) { if (!(p = decode_fh(p, &args->fh)) || !(p = decode_filename(p, &args->name, &args->len))) return 0; return xdr_argsize_check(rqstp, p); }
int nfssvc_decode_sattrargs(struct svc_rqst *rqstp, __be32 *p, struct nfsd_sattrargs *args) { if (!(p = decode_fh(p, &args->fh)) || !(p = decode_sattr(p, &args->attrs))) return 0; return xdr_argsize_check(rqstp, p); }
int nfs3svc_decode_commitargs(struct svc_rqst *rqstp, u32 *p, struct nfsd3_commitargs *args) { if (!(p = decode_fh(p, &args->fh))) return 0; p = xdr_decode_hyper(p, &args->offset); args->count = ntohl(*p++); return xdr_argsize_check(rqstp, p); }
static __be32 decode_notify_lock_args(struct svc_rqst *rqstp, struct xdr_stream *xdr, void *argp) { struct cb_notify_lock_args *args = argp; __be32 status; status = decode_fh(xdr, &args->cbnl_fh); if (unlikely(status != 0)) return status; return decode_lockowner(xdr, args); }
int nfs3svc_decode_mkdirargs(struct svc_rqst *rqstp, u32 *p, struct nfsd3_createargs *args) { if (!(p = decode_fh(p, &args->fh)) || !(p = decode_filename(p, &args->name, &args->len)) || !(p = decode_sattr3(p, &args->attrs))) return 0; return xdr_argsize_check(rqstp, p); }
int nfssvc_decode_readdirargs(struct svc_rqst *rqstp, u32 *p, struct nfsd_readdirargs *args) { if (!(p = decode_fh(p, &args->fh))) return 0; args->cookie = ntohl(*p++); args->count = ntohl(*p++); return xdr_argsize_check(rqstp, p); }
int nfs3svc_decode_diropargs(struct svc_rqst *rqstp, __be32 *p) { struct nfsd3_diropargs *args = rqstp->rq_argp; if (!(p = decode_fh(p, &args->fh)) || !(p = decode_filename(p, &args->name, &args->len))) return 0; return xdr_argsize_check(rqstp, p); }
static __be32 decode_getattr_args(struct svc_rqst *rqstp, struct xdr_stream *xdr, void *argp) { struct cb_getattrargs *args = argp; __be32 status; status = decode_fh(xdr, &args->fh); if (unlikely(status != 0)) return status; return decode_bitmap(xdr, args->bitmap); }
int nfssvc_decode_symlinkargs(struct svc_rqst *rqstp, __be32 *p, struct nfsd_symlinkargs *args) { if ( !(p = decode_fh(p, &args->ffh)) || !(p = decode_filename(p, &args->fname, &args->flen)) || !(p = decode_pathname(p, &args->tname, &args->tlen))) return 0; p = decode_sattr(p, &args->attrs); return xdr_argsize_check(rqstp, p); }
int nfs3svc_decode_commitargs(struct svc_rqst *rqstp, __be32 *p) { struct nfsd3_commitargs *args = rqstp->rq_argp; p = decode_fh(p, &args->fh); if (!p) return 0; p = xdr_decode_hyper(p, &args->offset); args->count = ntohl(*p++); return xdr_argsize_check(rqstp, p); }
static __be32 decode_getattr_args(struct svc_rqst *rqstp, struct xdr_stream *xdr, struct cb_getattrargs *args) { __be32 status; status = decode_fh(xdr, &args->fh); if (unlikely(status != 0)) goto out; status = decode_bitmap(xdr, args->bitmap); out: dprintk("%s: exit with status = %d\n", __func__, ntohl(status)); return status; }
static __be32 decode_notify_lock_args(struct svc_rqst *rqstp, struct xdr_stream *xdr, struct cb_notify_lock_args *args) { __be32 status; status = decode_fh(xdr, &args->cbnl_fh); if (unlikely(status != 0)) goto out; status = decode_lockowner(xdr, args); out: dprintk("%s: exit with status = %d\n", __func__, ntohl(status)); return status; }
int nfssvc_decode_sattrargs(struct svc_rqst *rqstp, __be32 *p) { struct nfsd_sattrargs *args = rqstp->rq_argp; p = decode_fh(p, &args->fh); if (!p) return 0; p = decode_sattr(p, &args->attrs); return xdr_argsize_check(rqstp, p); }
int nfssvc_decode_createargs(struct svc_rqst *rqstp, __be32 *p) { struct nfsd_createargs *args = rqstp->rq_argp; if ( !(p = decode_fh(p, &args->fh)) || !(p = decode_filename(p, &args->name, &args->len))) return 0; p = decode_sattr(p, &args->attrs); return xdr_argsize_check(rqstp, p); }