xprtrdma: Move the rpcrdma_sendctx::sc_wr field
authorChuck Lever <chuck.lever@oracle.com>
Thu, 17 Oct 2019 18:31:35 +0000 (14:31 -0400)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Thu, 24 Oct 2019 14:30:40 +0000 (10:30 -0400)
Clean up: This field is not needed in the Send completion handler,
so it can be moved to struct rpcrdma_req to reduce the size of
struct rpcrdma_sendctx, and to reduce the amount of memory that
is sloshed between the sending process and the Send completion
process.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
include/trace/events/rpcrdma.h
net/sunrpc/xprtrdma/frwr_ops.c
net/sunrpc/xprtrdma/rpc_rdma.c
net/sunrpc/xprtrdma/verbs.c
net/sunrpc/xprtrdma/xprt_rdma.h

index 7fd11ec..f8edab9 100644 (file)
@@ -667,9 +667,8 @@ TRACE_EVENT(xprtrdma_post_send,
                __entry->client_id = rqst->rq_task->tk_client ?
                                     rqst->rq_task->tk_client->cl_clid : -1;
                __entry->req = req;
-               __entry->num_sge = req->rl_sendctx->sc_wr.num_sge;
-               __entry->signaled = req->rl_sendctx->sc_wr.send_flags &
-                                   IB_SEND_SIGNALED;
+               __entry->num_sge = req->rl_wr.num_sge;
+               __entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED;
                __entry->status = status;
        ),
 
index 5cd8715..523722b 100644 (file)
@@ -396,7 +396,7 @@ int frwr_send(struct rpcrdma_ia *ia, struct rpcrdma_req *req)
        struct ib_send_wr *post_wr;
        struct rpcrdma_mr *mr;
 
-       post_wr = &req->rl_sendctx->sc_wr;
+       post_wr = &req->rl_wr;
        list_for_each_entry(mr, &req->rl_registered, mr_list) {
                struct rpcrdma_frwr *frwr;
 
index 1941b22..53cd2e3 100644 (file)
@@ -599,7 +599,7 @@ static bool rpcrdma_prepare_hdr_sge(struct rpcrdma_xprt *r_xprt,
 
        ib_dma_sync_single_for_device(rdmab_device(rb), sge->addr, sge->length,
                                      DMA_TO_DEVICE);
-       sc->sc_wr.num_sge++;
+       req->rl_wr.num_sge++;
        return true;
 
 out_regbuf:
@@ -711,7 +711,7 @@ map_tail:
        }
 
 out:
-       sc->sc_wr.num_sge += sge_no;
+       req->rl_wr.num_sge += sge_no;
        if (sc->sc_unmap_count)
                kref_get(&req->rl_kref);
        return true;
@@ -752,10 +752,13 @@ rpcrdma_prepare_send_sges(struct rpcrdma_xprt *r_xprt,
        req->rl_sendctx = rpcrdma_sendctx_get_locked(r_xprt);
        if (!req->rl_sendctx)
                goto err;
-       req->rl_sendctx->sc_wr.num_sge = 0;
        req->rl_sendctx->sc_unmap_count = 0;
        req->rl_sendctx->sc_req = req;
        kref_init(&req->rl_kref);
+       req->rl_wr.wr_cqe = &req->rl_sendctx->sc_cqe;
+       req->rl_wr.sg_list = req->rl_sendctx->sc_sges;
+       req->rl_wr.num_sge = 0;
+       req->rl_wr.opcode = IB_WR_SEND;
 
        ret = -EIO;
        if (!rpcrdma_prepare_hdr_sge(r_xprt, req, hdrlen))
index 3ab086a..2f46582 100644 (file)
@@ -811,9 +811,6 @@ static struct rpcrdma_sendctx *rpcrdma_sendctx_create(struct rpcrdma_ia *ia)
        if (!sc)
                return NULL;
 
-       sc->sc_wr.wr_cqe = &sc->sc_cqe;
-       sc->sc_wr.sg_list = sc->sc_sges;
-       sc->sc_wr.opcode = IB_WR_SEND;
        sc->sc_cqe.done = rpcrdma_wc_send;
        return sc;
 }
@@ -1469,7 +1466,7 @@ rpcrdma_ep_post(struct rpcrdma_ia *ia,
                struct rpcrdma_ep *ep,
                struct rpcrdma_req *req)
 {
-       struct ib_send_wr *send_wr = &req->rl_sendctx->sc_wr;
+       struct ib_send_wr *send_wr = &req->rl_wr;
        int rc;
 
        if (!ep->rep_send_count || kref_read(&req->rl_kref) > 1) {
index 0e5b7f3..cdd6a3d 100644 (file)
@@ -219,7 +219,6 @@ enum {
  */
 struct rpcrdma_req;
 struct rpcrdma_sendctx {
-       struct ib_send_wr       sc_wr;
        struct ib_cqe           sc_cqe;
        struct rpcrdma_req      *sc_req;
        unsigned int            sc_unmap_count;
@@ -314,6 +313,7 @@ struct rpcrdma_req {
        struct rpcrdma_rep      *rl_reply;
        struct xdr_stream       rl_stream;
        struct xdr_buf          rl_hdrbuf;
+       struct ib_send_wr       rl_wr;
        struct rpcrdma_sendctx  *rl_sendctx;
        struct rpcrdma_regbuf   *rl_rdmabuf;    /* xprt header */
        struct rpcrdma_regbuf   *rl_sendbuf;    /* rq_snd_buf */