mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 14:44:10 +08:00
NFSv4: Fix the nfsv4 readlink reply buffer alignment
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
d6ac02dfaa
commit
e3a535e173
@ -1201,21 +1201,11 @@ static int encode_readdir(struct xdr_stream *xdr, const struct nfs4_readdir_arg
|
||||
|
||||
static int encode_readlink(struct xdr_stream *xdr, const struct nfs4_readlink *readlink, struct rpc_rqst *req)
|
||||
{
|
||||
struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
|
||||
unsigned int replen;
|
||||
__be32 *p;
|
||||
|
||||
RESERVE_SPACE(4);
|
||||
WRITE32(OP_READLINK);
|
||||
|
||||
/* set up reply kvec
|
||||
* toplevel_status + taglen + rescount + OP_PUTFH + status
|
||||
* + OP_READLINK + status + string length = 8
|
||||
*/
|
||||
replen = (RPC_REPHDRSIZE + auth->au_rslack + 8) << 2;
|
||||
xdr_inline_pages(&req->rq_rcv_buf, replen, readlink->pages,
|
||||
readlink->pgbase, readlink->pglen);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1781,6 +1771,8 @@ static int nfs4_xdr_enc_readlink(struct rpc_rqst *req, __be32 *p, const struct n
|
||||
struct compound_hdr hdr = {
|
||||
.nops = 2,
|
||||
};
|
||||
struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
|
||||
unsigned int replen;
|
||||
int status;
|
||||
|
||||
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
||||
@ -1789,6 +1781,15 @@ static int nfs4_xdr_enc_readlink(struct rpc_rqst *req, __be32 *p, const struct n
|
||||
if(status)
|
||||
goto out;
|
||||
status = encode_readlink(&xdr, args, req);
|
||||
|
||||
/* set up reply kvec
|
||||
* toplevel_status + taglen + rescount + OP_PUTFH + status
|
||||
* + OP_READLINK + status + string length = 8
|
||||
*/
|
||||
replen = (RPC_REPHDRSIZE + auth->au_rslack + NFS4_dec_readlink_sz) << 2;
|
||||
xdr_inline_pages(&req->rq_rcv_buf, replen, args->pages,
|
||||
args->pgbase, args->pglen);
|
||||
|
||||
out:
|
||||
return status;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user