|
@@ -166,73 +166,3 @@ out_inval:
|
|
dprintk("svcrdma: failed to parse transport header\n");
|
|
dprintk("svcrdma: failed to parse transport header\n");
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
-
|
|
|
|
-/**
|
|
|
|
- * svc_rdma_xdr_get_reply_hdr_length - Get length of Reply transport header
|
|
|
|
- * @rdma_resp: buffer containing Reply transport header
|
|
|
|
- *
|
|
|
|
- * Returns length of transport header, in bytes.
|
|
|
|
- */
|
|
|
|
-unsigned int svc_rdma_xdr_get_reply_hdr_len(__be32 *rdma_resp)
|
|
|
|
-{
|
|
|
|
- unsigned int nsegs;
|
|
|
|
- __be32 *p;
|
|
|
|
-
|
|
|
|
- p = rdma_resp;
|
|
|
|
-
|
|
|
|
- /* RPC-over-RDMA V1 replies never have a Read list. */
|
|
|
|
- p += rpcrdma_fixed_maxsz + 1;
|
|
|
|
-
|
|
|
|
- /* Skip Write list. */
|
|
|
|
- while (*p++ != xdr_zero) {
|
|
|
|
- nsegs = be32_to_cpup(p++);
|
|
|
|
- p += nsegs * rpcrdma_segment_maxsz;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /* Skip Reply chunk. */
|
|
|
|
- if (*p++ != xdr_zero) {
|
|
|
|
- nsegs = be32_to_cpup(p++);
|
|
|
|
- p += nsegs * rpcrdma_segment_maxsz;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return (unsigned long)p - (unsigned long)rdma_resp;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void svc_rdma_xdr_encode_write_list(struct rpcrdma_msg *rmsgp, int chunks)
|
|
|
|
-{
|
|
|
|
- struct rpcrdma_write_array *ary;
|
|
|
|
-
|
|
|
|
- /* no read-list */
|
|
|
|
- rmsgp->rm_body.rm_chunks[0] = xdr_zero;
|
|
|
|
-
|
|
|
|
- /* write-array discrim */
|
|
|
|
- ary = (struct rpcrdma_write_array *)
|
|
|
|
- &rmsgp->rm_body.rm_chunks[1];
|
|
|
|
- ary->wc_discrim = xdr_one;
|
|
|
|
- ary->wc_nchunks = cpu_to_be32(chunks);
|
|
|
|
-
|
|
|
|
- /* write-list terminator */
|
|
|
|
- ary->wc_array[chunks].wc_target.rs_handle = xdr_zero;
|
|
|
|
-
|
|
|
|
- /* reply-array discriminator */
|
|
|
|
- ary->wc_array[chunks].wc_target.rs_length = xdr_zero;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void svc_rdma_xdr_encode_reply_array(struct rpcrdma_write_array *ary,
|
|
|
|
- int chunks)
|
|
|
|
-{
|
|
|
|
- ary->wc_discrim = xdr_one;
|
|
|
|
- ary->wc_nchunks = cpu_to_be32(chunks);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void svc_rdma_xdr_encode_array_chunk(struct rpcrdma_write_array *ary,
|
|
|
|
- int chunk_no,
|
|
|
|
- __be32 rs_handle,
|
|
|
|
- __be64 rs_offset,
|
|
|
|
- u32 write_len)
|
|
|
|
-{
|
|
|
|
- struct rpcrdma_segment *seg = &ary->wc_array[chunk_no].wc_target;
|
|
|
|
- seg->rs_handle = rs_handle;
|
|
|
|
- seg->rs_offset = rs_offset;
|
|
|
|
- seg->rs_length = cpu_to_be32(write_len);
|
|
|
|
-}
|
|
|