NFSD: Relocate nfsd4_decode_opaque()
[ Upstream commit 5dcbfabb676b2b6d97767209cf707eb463ca232a ] Enable nfsd4_decode_opaque() to be used in more decoders, and replace the READ* macros in nfsd4_decode_opaque(). Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
5e006a8128
commit
3cffafb466
1 changed files with 27 additions and 16 deletions
|
@ -207,6 +207,33 @@ static char *savemem(struct nfsd4_compoundargs *argp, __be32 *p, int nbytes)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NFSv4 basic data type decoders
|
||||||
|
*/
|
||||||
|
|
||||||
|
static __be32
|
||||||
|
nfsd4_decode_opaque(struct nfsd4_compoundargs *argp, struct xdr_netobj *o)
|
||||||
|
{
|
||||||
|
__be32 *p;
|
||||||
|
u32 len;
|
||||||
|
|
||||||
|
if (xdr_stream_decode_u32(argp->xdr, &len) < 0)
|
||||||
|
return nfserr_bad_xdr;
|
||||||
|
if (len == 0 || len > NFS4_OPAQUE_LIMIT)
|
||||||
|
return nfserr_bad_xdr;
|
||||||
|
p = xdr_inline_decode(argp->xdr, len);
|
||||||
|
if (!p)
|
||||||
|
return nfserr_bad_xdr;
|
||||||
|
o->data = svcxdr_tmpalloc(argp, len);
|
||||||
|
if (!o->data)
|
||||||
|
return nfserr_jukebox;
|
||||||
|
o->len = len;
|
||||||
|
memcpy(o->data, p, len);
|
||||||
|
|
||||||
|
return nfs_ok;
|
||||||
|
}
|
||||||
|
|
||||||
static __be32
|
static __be32
|
||||||
nfsd4_decode_component4(struct nfsd4_compoundargs *argp, char **namp, u32 *lenp)
|
nfsd4_decode_component4(struct nfsd4_compoundargs *argp, char **namp, u32 *lenp)
|
||||||
{
|
{
|
||||||
|
@ -943,22 +970,6 @@ xdr_error:
|
||||||
return nfserr_bad_xdr;
|
return nfserr_bad_xdr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __be32 nfsd4_decode_opaque(struct nfsd4_compoundargs *argp, struct xdr_netobj *o)
|
|
||||||
{
|
|
||||||
DECODE_HEAD;
|
|
||||||
|
|
||||||
READ_BUF(4);
|
|
||||||
o->len = be32_to_cpup(p++);
|
|
||||||
|
|
||||||
if (o->len == 0 || o->len > NFS4_OPAQUE_LIMIT)
|
|
||||||
return nfserr_bad_xdr;
|
|
||||||
|
|
||||||
READ_BUF(o->len);
|
|
||||||
SAVEMEM(o->data, o->len);
|
|
||||||
|
|
||||||
DECODE_TAIL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static __be32
|
static __be32
|
||||||
nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open)
|
nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue