| From 9ff0a6f5ed26dd765b263f1c88da0de04446df72 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 21 Feb 2020 17:00:23 -0500 |
| Subject: xprtrdma: Clean up the post_send path |
| |
| From: Chuck Lever <chuck.lever@oracle.com> |
| |
| [ Upstream commit 97d0de8812a10a66510ff95f8fe6e8d3053fd2ca ] |
| |
| Clean up: Simplify the synopses of functions in the post_send path |
| by combining the struct rpcrdma_ia and struct rpcrdma_ep arguments. |
| |
| Signed-off-by: Chuck Lever <chuck.lever@oracle.com> |
| Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| net/sunrpc/xprtrdma/backchannel.c | 2 +- |
| net/sunrpc/xprtrdma/frwr_ops.c | 14 +++++++++----- |
| net/sunrpc/xprtrdma/transport.c | 2 +- |
| net/sunrpc/xprtrdma/verbs.c | 13 +++++-------- |
| net/sunrpc/xprtrdma/xprt_rdma.h | 5 ++--- |
| 5 files changed, 18 insertions(+), 18 deletions(-) |
| |
| diff --git a/net/sunrpc/xprtrdma/backchannel.c b/net/sunrpc/xprtrdma/backchannel.c |
| index 1a0ae0c61353c..4b43910a6ed21 100644 |
| --- a/net/sunrpc/xprtrdma/backchannel.c |
| +++ b/net/sunrpc/xprtrdma/backchannel.c |
| @@ -115,7 +115,7 @@ int xprt_rdma_bc_send_reply(struct rpc_rqst *rqst) |
| if (rc < 0) |
| goto failed_marshal; |
| |
| - if (rpcrdma_ep_post(&r_xprt->rx_ia, &r_xprt->rx_ep, req)) |
| + if (rpcrdma_post_sends(r_xprt, req)) |
| goto drop_connection; |
| return 0; |
| |
| diff --git a/net/sunrpc/xprtrdma/frwr_ops.c b/net/sunrpc/xprtrdma/frwr_ops.c |
| index 125297c9aa3e7..79059d48f52b7 100644 |
| --- a/net/sunrpc/xprtrdma/frwr_ops.c |
| +++ b/net/sunrpc/xprtrdma/frwr_ops.c |
| @@ -372,18 +372,22 @@ static void frwr_wc_fastreg(struct ib_cq *cq, struct ib_wc *wc) |
| } |
| |
| /** |
| - * frwr_send - post Send WR containing the RPC Call message |
| - * @ia: interface adapter |
| - * @req: Prepared RPC Call |
| + * frwr_send - post Send WRs containing the RPC Call message |
| + * @r_xprt: controlling transport instance |
| + * @req: prepared RPC Call |
| * |
| * For FRWR, chain any FastReg WRs to the Send WR. Only a |
| * single ib_post_send call is needed to register memory |
| * and then post the Send WR. |
| * |
| - * Returns the result of ib_post_send. |
| + * Returns the return code from ib_post_send. |
| + * |
| + * Caller must hold the transport send lock to ensure that the |
| + * pointers to the transport's rdma_cm_id and QP are stable. |
| */ |
| -int frwr_send(struct rpcrdma_ia *ia, struct rpcrdma_req *req) |
| +int frwr_send(struct rpcrdma_xprt *r_xprt, struct rpcrdma_req *req) |
| { |
| + struct rpcrdma_ia *ia = &r_xprt->rx_ia; |
| struct ib_send_wr *post_wr; |
| struct rpcrdma_mr *mr; |
| |
| diff --git a/net/sunrpc/xprtrdma/transport.c b/net/sunrpc/xprtrdma/transport.c |
| index 3cfeba68ee9a1..46e7949788e1a 100644 |
| --- a/net/sunrpc/xprtrdma/transport.c |
| +++ b/net/sunrpc/xprtrdma/transport.c |
| @@ -694,7 +694,7 @@ xprt_rdma_send_request(struct rpc_rqst *rqst) |
| goto drop_connection; |
| rqst->rq_xtime = ktime_get(); |
| |
| - if (rpcrdma_ep_post(&r_xprt->rx_ia, &r_xprt->rx_ep, req)) |
| + if (rpcrdma_post_sends(r_xprt, req)) |
| goto drop_connection; |
| |
| rqst->rq_xmit_bytes_sent += rqst->rq_snd_buf.len; |
| diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c |
| index 353f61ac8d519..4b9fbf69b4955 100644 |
| --- a/net/sunrpc/xprtrdma/verbs.c |
| +++ b/net/sunrpc/xprtrdma/verbs.c |
| @@ -1502,20 +1502,17 @@ static void rpcrdma_regbuf_free(struct rpcrdma_regbuf *rb) |
| } |
| |
| /** |
| - * rpcrdma_ep_post - Post WRs to a transport's Send Queue |
| - * @ia: transport's device information |
| - * @ep: transport's RDMA endpoint information |
| + * rpcrdma_post_sends - Post WRs to a transport's Send Queue |
| + * @r_xprt: controlling transport instance |
| * @req: rpcrdma_req containing the Send WR to post |
| * |
| * Returns 0 if the post was successful, otherwise -ENOTCONN |
| * is returned. |
| */ |
| -int |
| -rpcrdma_ep_post(struct rpcrdma_ia *ia, |
| - struct rpcrdma_ep *ep, |
| - struct rpcrdma_req *req) |
| +int rpcrdma_post_sends(struct rpcrdma_xprt *r_xprt, struct rpcrdma_req *req) |
| { |
| struct ib_send_wr *send_wr = &req->rl_wr; |
| + struct rpcrdma_ep *ep = &r_xprt->rx_ep; |
| int rc; |
| |
| if (!ep->rep_send_count || kref_read(&req->rl_kref) > 1) { |
| @@ -1526,7 +1523,7 @@ rpcrdma_ep_post(struct rpcrdma_ia *ia, |
| --ep->rep_send_count; |
| } |
| |
| - rc = frwr_send(ia, req); |
| + rc = frwr_send(r_xprt, req); |
| trace_xprtrdma_post_send(req, rc); |
| if (rc) |
| return -ENOTCONN; |
| diff --git a/net/sunrpc/xprtrdma/xprt_rdma.h b/net/sunrpc/xprtrdma/xprt_rdma.h |
| index 37d5080c250b8..600574a0d8387 100644 |
| --- a/net/sunrpc/xprtrdma/xprt_rdma.h |
| +++ b/net/sunrpc/xprtrdma/xprt_rdma.h |
| @@ -469,8 +469,7 @@ void rpcrdma_ep_destroy(struct rpcrdma_xprt *r_xprt); |
| int rpcrdma_ep_connect(struct rpcrdma_ep *, struct rpcrdma_ia *); |
| void rpcrdma_ep_disconnect(struct rpcrdma_ep *, struct rpcrdma_ia *); |
| |
| -int rpcrdma_ep_post(struct rpcrdma_ia *, struct rpcrdma_ep *, |
| - struct rpcrdma_req *); |
| +int rpcrdma_post_sends(struct rpcrdma_xprt *r_xprt, struct rpcrdma_req *req); |
| void rpcrdma_post_recvs(struct rpcrdma_xprt *r_xprt, bool temp); |
| |
| /* |
| @@ -544,7 +543,7 @@ struct rpcrdma_mr_seg *frwr_map(struct rpcrdma_xprt *r_xprt, |
| struct rpcrdma_mr_seg *seg, |
| int nsegs, bool writing, __be32 xid, |
| struct rpcrdma_mr *mr); |
| -int frwr_send(struct rpcrdma_ia *ia, struct rpcrdma_req *req); |
| +int frwr_send(struct rpcrdma_xprt *r_xprt, struct rpcrdma_req *req); |
| void frwr_reminv(struct rpcrdma_rep *rep, struct list_head *mrs); |
| void frwr_unmap_sync(struct rpcrdma_xprt *r_xprt, struct rpcrdma_req *req); |
| void frwr_unmap_async(struct rpcrdma_xprt *r_xprt, struct rpcrdma_req *req); |
| -- |
| 2.20.1 |
| |