mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-05 20:24:09 +08:00
xprtrdma: Move the rpcrdma_sendctx::sc_wr field
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>
This commit is contained in:
parent
b5cde6aa88
commit
dc15c3d5f1
@ -667,9 +667,8 @@ TRACE_EVENT(xprtrdma_post_send,
|
|||||||
__entry->client_id = rqst->rq_task->tk_client ?
|
__entry->client_id = rqst->rq_task->tk_client ?
|
||||||
rqst->rq_task->tk_client->cl_clid : -1;
|
rqst->rq_task->tk_client->cl_clid : -1;
|
||||||
__entry->req = req;
|
__entry->req = req;
|
||||||
__entry->num_sge = req->rl_sendctx->sc_wr.num_sge;
|
__entry->num_sge = req->rl_wr.num_sge;
|
||||||
__entry->signaled = req->rl_sendctx->sc_wr.send_flags &
|
__entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED;
|
||||||
IB_SEND_SIGNALED;
|
|
||||||
__entry->status = status;
|
__entry->status = status;
|
||||||
),
|
),
|
||||||
|
|
||||||
|
@ -396,7 +396,7 @@ int frwr_send(struct rpcrdma_ia *ia, struct rpcrdma_req *req)
|
|||||||
struct ib_send_wr *post_wr;
|
struct ib_send_wr *post_wr;
|
||||||
struct rpcrdma_mr *mr;
|
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) {
|
list_for_each_entry(mr, &req->rl_registered, mr_list) {
|
||||||
struct rpcrdma_frwr *frwr;
|
struct rpcrdma_frwr *frwr;
|
||||||
|
|
||||||
|
@ -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,
|
ib_dma_sync_single_for_device(rdmab_device(rb), sge->addr, sge->length,
|
||||||
DMA_TO_DEVICE);
|
DMA_TO_DEVICE);
|
||||||
sc->sc_wr.num_sge++;
|
req->rl_wr.num_sge++;
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
out_regbuf:
|
out_regbuf:
|
||||||
@ -711,7 +711,7 @@ map_tail:
|
|||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
sc->sc_wr.num_sge += sge_no;
|
req->rl_wr.num_sge += sge_no;
|
||||||
if (sc->sc_unmap_count)
|
if (sc->sc_unmap_count)
|
||||||
kref_get(&req->rl_kref);
|
kref_get(&req->rl_kref);
|
||||||
return true;
|
return true;
|
||||||
@ -752,10 +752,13 @@ rpcrdma_prepare_send_sges(struct rpcrdma_xprt *r_xprt,
|
|||||||
req->rl_sendctx = rpcrdma_sendctx_get_locked(r_xprt);
|
req->rl_sendctx = rpcrdma_sendctx_get_locked(r_xprt);
|
||||||
if (!req->rl_sendctx)
|
if (!req->rl_sendctx)
|
||||||
goto err;
|
goto err;
|
||||||
req->rl_sendctx->sc_wr.num_sge = 0;
|
|
||||||
req->rl_sendctx->sc_unmap_count = 0;
|
req->rl_sendctx->sc_unmap_count = 0;
|
||||||
req->rl_sendctx->sc_req = req;
|
req->rl_sendctx->sc_req = req;
|
||||||
kref_init(&req->rl_kref);
|
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;
|
ret = -EIO;
|
||||||
if (!rpcrdma_prepare_hdr_sge(r_xprt, req, hdrlen))
|
if (!rpcrdma_prepare_hdr_sge(r_xprt, req, hdrlen))
|
||||||
|
@ -811,9 +811,6 @@ static struct rpcrdma_sendctx *rpcrdma_sendctx_create(struct rpcrdma_ia *ia)
|
|||||||
if (!sc)
|
if (!sc)
|
||||||
return NULL;
|
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;
|
sc->sc_cqe.done = rpcrdma_wc_send;
|
||||||
return sc;
|
return sc;
|
||||||
}
|
}
|
||||||
@ -1469,7 +1466,7 @@ rpcrdma_ep_post(struct rpcrdma_ia *ia,
|
|||||||
struct rpcrdma_ep *ep,
|
struct rpcrdma_ep *ep,
|
||||||
struct rpcrdma_req *req)
|
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;
|
int rc;
|
||||||
|
|
||||||
if (!ep->rep_send_count || kref_read(&req->rl_kref) > 1) {
|
if (!ep->rep_send_count || kref_read(&req->rl_kref) > 1) {
|
||||||
|
@ -219,7 +219,6 @@ enum {
|
|||||||
*/
|
*/
|
||||||
struct rpcrdma_req;
|
struct rpcrdma_req;
|
||||||
struct rpcrdma_sendctx {
|
struct rpcrdma_sendctx {
|
||||||
struct ib_send_wr sc_wr;
|
|
||||||
struct ib_cqe sc_cqe;
|
struct ib_cqe sc_cqe;
|
||||||
struct rpcrdma_req *sc_req;
|
struct rpcrdma_req *sc_req;
|
||||||
unsigned int sc_unmap_count;
|
unsigned int sc_unmap_count;
|
||||||
@ -314,6 +313,7 @@ struct rpcrdma_req {
|
|||||||
struct rpcrdma_rep *rl_reply;
|
struct rpcrdma_rep *rl_reply;
|
||||||
struct xdr_stream rl_stream;
|
struct xdr_stream rl_stream;
|
||||||
struct xdr_buf rl_hdrbuf;
|
struct xdr_buf rl_hdrbuf;
|
||||||
|
struct ib_send_wr rl_wr;
|
||||||
struct rpcrdma_sendctx *rl_sendctx;
|
struct rpcrdma_sendctx *rl_sendctx;
|
||||||
struct rpcrdma_regbuf *rl_rdmabuf; /* xprt header */
|
struct rpcrdma_regbuf *rl_rdmabuf; /* xprt header */
|
||||||
struct rpcrdma_regbuf *rl_sendbuf; /* rq_snd_buf */
|
struct rpcrdma_regbuf *rl_sendbuf; /* rq_snd_buf */
|
||||||
|
Loading…
Reference in New Issue
Block a user