Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit da7049f8 authored by Chuck Lever's avatar Chuck Lever Committed by J. Bruce Fields
Browse files

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: default avatarChuck Lever <chuck.lever@oracle.com>
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent 3f87d5d6
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -182,7 +182,6 @@ struct svcxprt_rdma {

/* svc_rdma_marshal.c */
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 *,
				     struct rpcrdma_msg *,
				     enum rpcrdma_errcode, u32 *);
+0 −56
Original line number Diff line number Diff line
@@ -211,62 +211,6 @@ int svc_rdma_xdr_decode_req(struct rpcrdma_msg **rdma_req,
	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,
			      struct rpcrdma_msg *rmsgp,
			      enum rpcrdma_errcode err, u32 *va)