diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2017-02-07 11:58:40 -0500 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2017-02-08 14:41:58 -0500 |
commit | c2ccf64a6c4bf3bcbf4e6e6b94a51500991022a1 (patch) | |
tree | 810d9839608bad02bb37ca7176263885bff0df97 | |
parent | 647e18e3bd0308b38d5341fc08cd70ed1ce28a71 (diff) |
svcrdma: Clean up backchannel send header encoding
Replace C structure-based XDR decoding with pointer arithmetic.
Pointer arithmetic is considered more portable.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
-rw-r--r-- | net/sunrpc/xprtrdma/svc_rdma_backchannel.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/net/sunrpc/xprtrdma/svc_rdma_backchannel.c b/net/sunrpc/xprtrdma/svc_rdma_backchannel.c index 288e35c2d8f4..b1bc7a796782 100644 --- a/net/sunrpc/xprtrdma/svc_rdma_backchannel.c +++ b/net/sunrpc/xprtrdma/svc_rdma_backchannel.c | |||
@@ -200,19 +200,20 @@ rpcrdma_bc_send_request(struct svcxprt_rdma *rdma, struct rpc_rqst *rqst) | |||
200 | { | 200 | { |
201 | struct rpc_xprt *xprt = rqst->rq_xprt; | 201 | struct rpc_xprt *xprt = rqst->rq_xprt; |
202 | struct rpcrdma_xprt *r_xprt = rpcx_to_rdmax(xprt); | 202 | struct rpcrdma_xprt *r_xprt = rpcx_to_rdmax(xprt); |
203 | struct rpcrdma_msg *headerp = (struct rpcrdma_msg *)rqst->rq_buffer; | 203 | __be32 *p; |
204 | int rc; | 204 | int rc; |
205 | 205 | ||
206 | /* Space in the send buffer for an RPC/RDMA header is reserved | 206 | /* Space in the send buffer for an RPC/RDMA header is reserved |
207 | * via xprt->tsh_size. | 207 | * via xprt->tsh_size. |
208 | */ | 208 | */ |
209 | headerp->rm_xid = rqst->rq_xid; | 209 | p = rqst->rq_buffer; |
210 | headerp->rm_vers = rpcrdma_version; | 210 | *p++ = rqst->rq_xid; |
211 | headerp->rm_credit = cpu_to_be32(r_xprt->rx_buf.rb_bc_max_requests); | 211 | *p++ = rpcrdma_version; |
212 | headerp->rm_type = rdma_msg; | 212 | *p++ = cpu_to_be32(r_xprt->rx_buf.rb_bc_max_requests); |
213 | headerp->rm_body.rm_chunks[0] = xdr_zero; | 213 | *p++ = rdma_msg; |
214 | headerp->rm_body.rm_chunks[1] = xdr_zero; | 214 | *p++ = xdr_zero; |
215 | headerp->rm_body.rm_chunks[2] = xdr_zero; | 215 | *p++ = xdr_zero; |
216 | *p = xdr_zero; | ||
216 | 217 | ||
217 | #ifdef SVCRDMA_BACKCHANNEL_DEBUG | 218 | #ifdef SVCRDMA_BACKCHANNEL_DEBUG |
218 | pr_info("%s: %*ph\n", __func__, 64, rqst->rq_buffer); | 219 | pr_info("%s: %*ph\n", __func__, 64, rqst->rq_buffer); |