|
@@ -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)
|