svcrdma: Remove svc_rdma_xdr_decode_deferred_req()
svc_rdma_xdr_decode_deferred_req() indexes an array with an un-byte-swapped value off the wire. Fortunately this function isn't used anywhere, so simply remove it. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
3f87d5d6ac
commit
da7049f834
|
@ -182,7 +182,6 @@ struct svcxprt_rdma {
|
||||||
|
|
||||||
/* svc_rdma_marshal.c */
|
/* svc_rdma_marshal.c */
|
||||||
extern int svc_rdma_xdr_decode_req(struct rpcrdma_msg **, struct svc_rqst *);
|
extern int svc_rdma_xdr_decode_req(struct rpcrdma_msg **, struct svc_rqst *);
|
||||||
extern int svc_rdma_xdr_decode_deferred_req(struct svc_rqst *);
|
|
||||||
extern int svc_rdma_xdr_encode_error(struct svcxprt_rdma *,
|
extern int svc_rdma_xdr_encode_error(struct svcxprt_rdma *,
|
||||||
struct rpcrdma_msg *,
|
struct rpcrdma_msg *,
|
||||||
enum rpcrdma_errcode, u32 *);
|
enum rpcrdma_errcode, u32 *);
|
||||||
|
|
|
@ -211,62 +211,6 @@ int svc_rdma_xdr_decode_req(struct rpcrdma_msg **rdma_req,
|
||||||
return hdr_len;
|
return hdr_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
int svc_rdma_xdr_decode_deferred_req(struct svc_rqst *rqstp)
|
|
||||||
{
|
|
||||||
struct rpcrdma_msg *rmsgp = NULL;
|
|
||||||
struct rpcrdma_read_chunk *ch;
|
|
||||||
struct rpcrdma_write_array *ary;
|
|
||||||
u32 *va;
|
|
||||||
u32 hdrlen;
|
|
||||||
|
|
||||||
dprintk("svcrdma: processing deferred RDMA header on rqstp=%p\n",
|
|
||||||
rqstp);
|
|
||||||
rmsgp = (struct rpcrdma_msg *)rqstp->rq_arg.head[0].iov_base;
|
|
||||||
|
|
||||||
/* Pull in the extra for the padded case and bump our pointer */
|
|
||||||
if (rmsgp->rm_type == RDMA_MSGP) {
|
|
||||||
va = &rmsgp->rm_body.rm_padded.rm_pempty[4];
|
|
||||||
rqstp->rq_arg.head[0].iov_base = va;
|
|
||||||
hdrlen = (u32)((unsigned long)va - (unsigned long)rmsgp);
|
|
||||||
rqstp->rq_arg.head[0].iov_len -= hdrlen;
|
|
||||||
return hdrlen;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Skip all chunks to find RPC msg. These were previously processed
|
|
||||||
*/
|
|
||||||
va = &rmsgp->rm_body.rm_chunks[0];
|
|
||||||
|
|
||||||
/* Skip read-list */
|
|
||||||
for (ch = (struct rpcrdma_read_chunk *)va;
|
|
||||||
ch->rc_discrim != xdr_zero; ch++);
|
|
||||||
va = (u32 *)&ch->rc_position;
|
|
||||||
|
|
||||||
/* Skip write-list */
|
|
||||||
ary = (struct rpcrdma_write_array *)va;
|
|
||||||
if (ary->wc_discrim == xdr_zero)
|
|
||||||
va = (u32 *)&ary->wc_nchunks;
|
|
||||||
else
|
|
||||||
/*
|
|
||||||
* rs_length is the 2nd 4B field in wc_target and taking its
|
|
||||||
* address skips the list terminator
|
|
||||||
*/
|
|
||||||
va = (u32 *)&ary->wc_array[ary->wc_nchunks].wc_target.rs_length;
|
|
||||||
|
|
||||||
/* Skip reply-array */
|
|
||||||
ary = (struct rpcrdma_write_array *)va;
|
|
||||||
if (ary->wc_discrim == xdr_zero)
|
|
||||||
va = (u32 *)&ary->wc_nchunks;
|
|
||||||
else
|
|
||||||
va = (u32 *)&ary->wc_array[ary->wc_nchunks];
|
|
||||||
|
|
||||||
rqstp->rq_arg.head[0].iov_base = va;
|
|
||||||
hdrlen = (unsigned long)va - (unsigned long)rmsgp;
|
|
||||||
rqstp->rq_arg.head[0].iov_len -= hdrlen;
|
|
||||||
|
|
||||||
return hdrlen;
|
|
||||||
}
|
|
||||||
|
|
||||||
int svc_rdma_xdr_encode_error(struct svcxprt_rdma *xprt,
|
int svc_rdma_xdr_encode_error(struct svcxprt_rdma *xprt,
|
||||||
struct rpcrdma_msg *rmsgp,
|
struct rpcrdma_msg *rmsgp,
|
||||||
enum rpcrdma_errcode err, u32 *va)
|
enum rpcrdma_errcode err, u32 *va)
|
||||||
|
|
Loading…
Reference in New Issue