Commit 97d0de88 authored by Chuck Lever's avatar Chuck Lever Committed by Anna Schumaker

xprtrdma: Clean up the post_send path

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: default avatarChuck Lever <chuck.lever@oracle.com>
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
parent 253a5162
...@@ -115,7 +115,7 @@ int xprt_rdma_bc_send_reply(struct rpc_rqst *rqst) ...@@ -115,7 +115,7 @@ int xprt_rdma_bc_send_reply(struct rpc_rqst *rqst)
if (rc < 0) if (rc < 0)
goto failed_marshal; 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; goto drop_connection;
return 0; return 0;
......
...@@ -374,18 +374,22 @@ static void frwr_wc_fastreg(struct ib_cq *cq, struct ib_wc *wc) ...@@ -374,18 +374,22 @@ static void frwr_wc_fastreg(struct ib_cq *cq, struct ib_wc *wc)
} }
/** /**
* frwr_send - post Send WR containing the RPC Call message * frwr_send - post Send WRs containing the RPC Call message
* @ia: interface adapter * @r_xprt: controlling transport instance
* @req: Prepared RPC Call * @req: prepared RPC Call
* *
* For FRWR, chain any FastReg WRs to the Send WR. Only a * For FRWR, chain any FastReg WRs to the Send WR. Only a
* single ib_post_send call is needed to register memory * single ib_post_send call is needed to register memory
* and then post the Send WR. * 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 ib_send_wr *post_wr;
struct rpcrdma_mr *mr; struct rpcrdma_mr *mr;
......
...@@ -688,7 +688,7 @@ xprt_rdma_send_request(struct rpc_rqst *rqst) ...@@ -688,7 +688,7 @@ xprt_rdma_send_request(struct rpc_rqst *rqst)
goto drop_connection; goto drop_connection;
rqst->rq_xtime = ktime_get(); 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; goto drop_connection;
rqst->rq_xmit_bytes_sent += rqst->rq_snd_buf.len; rqst->rq_xmit_bytes_sent += rqst->rq_snd_buf.len;
......
...@@ -1461,20 +1461,17 @@ static void rpcrdma_regbuf_free(struct rpcrdma_regbuf *rb) ...@@ -1461,20 +1461,17 @@ static void rpcrdma_regbuf_free(struct rpcrdma_regbuf *rb)
} }
/** /**
* rpcrdma_ep_post - Post WRs to a transport's Send Queue * rpcrdma_post_sends - Post WRs to a transport's Send Queue
* @ia: transport's device information * @r_xprt: controlling transport instance
* @ep: transport's RDMA endpoint information
* @req: rpcrdma_req containing the Send WR to post * @req: rpcrdma_req containing the Send WR to post
* *
* Returns 0 if the post was successful, otherwise -ENOTCONN * Returns 0 if the post was successful, otherwise -ENOTCONN
* is returned. * is returned.
*/ */
int int rpcrdma_post_sends(struct rpcrdma_xprt *r_xprt, struct rpcrdma_req *req)
rpcrdma_ep_post(struct rpcrdma_ia *ia,
struct rpcrdma_ep *ep,
struct rpcrdma_req *req)
{ {
struct ib_send_wr *send_wr = &req->rl_wr; struct ib_send_wr *send_wr = &req->rl_wr;
struct rpcrdma_ep *ep = &r_xprt->rx_ep;
int rc; int rc;
if (!ep->rep_send_count || kref_read(&req->rl_kref) > 1) { if (!ep->rep_send_count || kref_read(&req->rl_kref) > 1) {
...@@ -1485,7 +1482,7 @@ rpcrdma_ep_post(struct rpcrdma_ia *ia, ...@@ -1485,7 +1482,7 @@ rpcrdma_ep_post(struct rpcrdma_ia *ia,
--ep->rep_send_count; --ep->rep_send_count;
} }
rc = frwr_send(ia, req); rc = frwr_send(r_xprt, req);
trace_xprtrdma_post_send(req, rc); trace_xprtrdma_post_send(req, rc);
if (rc) if (rc)
return -ENOTCONN; return -ENOTCONN;
......
...@@ -467,8 +467,7 @@ void rpcrdma_ia_close(struct rpcrdma_ia *); ...@@ -467,8 +467,7 @@ void rpcrdma_ia_close(struct rpcrdma_ia *);
int rpcrdma_ep_connect(struct rpcrdma_ep *, struct rpcrdma_ia *); int rpcrdma_ep_connect(struct rpcrdma_ep *, struct rpcrdma_ia *);
void rpcrdma_ep_disconnect(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 *, int rpcrdma_post_sends(struct rpcrdma_xprt *r_xprt, struct rpcrdma_req *req);
struct rpcrdma_req *);
void rpcrdma_post_recvs(struct rpcrdma_xprt *r_xprt, bool temp); void rpcrdma_post_recvs(struct rpcrdma_xprt *r_xprt, bool temp);
/* /*
...@@ -542,7 +541,7 @@ struct rpcrdma_mr_seg *frwr_map(struct rpcrdma_xprt *r_xprt, ...@@ -542,7 +541,7 @@ struct rpcrdma_mr_seg *frwr_map(struct rpcrdma_xprt *r_xprt,
struct rpcrdma_mr_seg *seg, struct rpcrdma_mr_seg *seg,
int nsegs, bool writing, __be32 xid, int nsegs, bool writing, __be32 xid,
struct rpcrdma_mr *mr); 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_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_sync(struct rpcrdma_xprt *r_xprt, struct rpcrdma_req *req);
void frwr_unmap_async(struct rpcrdma_xprt *r_xprt, struct rpcrdma_req *req); void frwr_unmap_async(struct rpcrdma_xprt *r_xprt, struct rpcrdma_req *req);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment