From: Chuck Lever <chuck.lever-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
To: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-nfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: [PATCH v1 13/22] xprtrdma: Move send_wr to struct rpcrdma_req
Date: Mon, 15 Aug 2016 16:52:00 -0400 [thread overview]
Message-ID: <20160815205200.11652.59039.stgit@manet.1015granger.net> (raw)
In-Reply-To: <20160815195649.11652.32252.stgit-FYjufvaPoItvLzlybtyyYzGyq/o6K9yX@public.gmane.org>
Clean up: Most of the fields in each send_wr do not vary. There is
no need to initialize them before each ib_post_send(). This removes
a large-ish data structure from the stack.
Signed-off-by: Chuck Lever <chuck.lever-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
---
net/sunrpc/xprtrdma/backchannel.c | 3 ++-
net/sunrpc/xprtrdma/rpc_rdma.c | 5 +++--
net/sunrpc/xprtrdma/verbs.c | 36 +++++++++++++++++-------------------
net/sunrpc/xprtrdma/xprt_rdma.h | 4 ++--
4 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/net/sunrpc/xprtrdma/backchannel.c b/net/sunrpc/xprtrdma/backchannel.c
index 887ef44..61a58f5 100644
--- a/net/sunrpc/xprtrdma/backchannel.c
+++ b/net/sunrpc/xprtrdma/backchannel.c
@@ -241,7 +241,8 @@ int rpcrdma_bc_marshal_reply(struct rpc_rqst *rqst)
req->rl_send_iov[1].length = rpclen;
req->rl_send_iov[1].lkey = rdmab_lkey(req->rl_sendbuf);
- req->rl_niovs = 2;
+ req->rl_send_wr.num_sge = 2;
+
return 0;
out_map:
diff --git a/net/sunrpc/xprtrdma/rpc_rdma.c b/net/sunrpc/xprtrdma/rpc_rdma.c
index 6187cee..c2906e3 100644
--- a/net/sunrpc/xprtrdma/rpc_rdma.c
+++ b/net/sunrpc/xprtrdma/rpc_rdma.c
@@ -687,7 +687,7 @@ rpcrdma_marshal_req(struct rpc_rqst *rqst)
req->rl_send_iov[0].length = hdrlen;
req->rl_send_iov[0].lkey = rdmab_lkey(req->rl_rdmabuf);
- req->rl_niovs = 1;
+ req->rl_send_wr.num_sge = 1;
if (rtype == rpcrdma_areadch)
return 0;
@@ -697,7 +697,8 @@ rpcrdma_marshal_req(struct rpc_rqst *rqst)
req->rl_send_iov[1].length = rpclen;
req->rl_send_iov[1].lkey = rdmab_lkey(req->rl_sendbuf);
- req->rl_niovs = 2;
+ req->rl_send_wr.num_sge = 2;
+
return 0;
out_overflow:
diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c
index 81cae65..d5e88ee 100644
--- a/net/sunrpc/xprtrdma/verbs.c
+++ b/net/sunrpc/xprtrdma/verbs.c
@@ -848,6 +848,10 @@ rpcrdma_create_req(struct rpcrdma_xprt *r_xprt)
req->rl_cqe.done = rpcrdma_wc_send;
req->rl_buffer = &r_xprt->rx_buf;
INIT_LIST_HEAD(&req->rl_registered);
+ req->rl_send_wr.next = NULL;
+ req->rl_send_wr.wr_cqe = &req->rl_cqe;
+ req->rl_send_wr.sg_list = req->rl_send_iov;
+ req->rl_send_wr.opcode = IB_WR_SEND;
return req;
}
@@ -1112,7 +1116,7 @@ rpcrdma_buffer_put(struct rpcrdma_req *req)
struct rpcrdma_buffer *buffers = req->rl_buffer;
struct rpcrdma_rep *rep = req->rl_reply;
- req->rl_niovs = 0;
+ req->rl_send_wr.num_sge = 0;
req->rl_reply = NULL;
spin_lock(&buffers->rb_lock);
@@ -1240,38 +1244,32 @@ rpcrdma_ep_post(struct rpcrdma_ia *ia,
struct rpcrdma_req *req)
{
struct ib_device *device = ia->ri_device;
- struct ib_send_wr send_wr, *send_wr_fail;
- struct rpcrdma_rep *rep = req->rl_reply;
- struct ib_sge *iov = req->rl_send_iov;
+ struct ib_send_wr *send_wr = &req->rl_send_wr;
+ struct ib_send_wr *send_wr_fail;
+ struct ib_sge *sge = req->rl_send_iov;
int i, rc;
- if (rep) {
- rc = rpcrdma_ep_post_recv(ia, rep);
+ if (req->rl_reply) {
+ rc = rpcrdma_ep_post_recv(ia, req->rl_reply);
if (rc)
return rc;
req->rl_reply = NULL;
}
- send_wr.next = NULL;
- send_wr.wr_cqe = &req->rl_cqe;
- send_wr.sg_list = iov;
- send_wr.num_sge = req->rl_niovs;
- send_wr.opcode = IB_WR_SEND;
-
- for (i = 0; i < send_wr.num_sge; i++)
- ib_dma_sync_single_for_device(device, iov[i].addr,
- iov[i].length, DMA_TO_DEVICE);
+ for (i = 0; i < send_wr->num_sge; i++)
+ ib_dma_sync_single_for_device(device, sge[i].addr,
+ sge[i].length, DMA_TO_DEVICE);
dprintk("RPC: %s: posting %d s/g entries\n",
- __func__, send_wr.num_sge);
+ __func__, send_wr->num_sge);
if (DECR_CQCOUNT(ep) > 0)
- send_wr.send_flags = 0;
+ send_wr->send_flags = 0;
else { /* Provider must take a send completion every now and then */
INIT_CQCOUNT(ep);
- send_wr.send_flags = IB_SEND_SIGNALED;
+ send_wr->send_flags = IB_SEND_SIGNALED;
}
- rc = ib_post_send(ia->ri_id->qp, &send_wr, &send_wr_fail);
+ rc = ib_post_send(ia->ri_id->qp, send_wr, &send_wr_fail);
if (rc)
goto out_postsend_err;
return 0;
diff --git a/net/sunrpc/xprtrdma/xprt_rdma.h b/net/sunrpc/xprtrdma/xprt_rdma.h
index 19da45b..73e3345 100644
--- a/net/sunrpc/xprtrdma/xprt_rdma.h
+++ b/net/sunrpc/xprtrdma/xprt_rdma.h
@@ -284,10 +284,10 @@ struct rpcrdma_mr_seg { /* chunk descriptors */
struct rpcrdma_buffer;
struct rpcrdma_req {
struct list_head rl_free;
- unsigned int rl_niovs;
unsigned int rl_connect_cookie;
struct rpcrdma_buffer *rl_buffer;
- struct rpcrdma_rep *rl_reply;/* holder for reply buffer */
+ struct rpcrdma_rep *rl_reply;
+ struct ib_send_wr rl_send_wr;
struct ib_sge rl_send_iov[RPCRDMA_MAX_IOVS];
struct rpcrdma_regbuf *rl_rdmabuf; /* xprt header */
struct rpcrdma_regbuf *rl_sendbuf; /* rq_snd_buf */
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2016-08-15 20:52 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-15 20:50 [PATCH v1 00/22] client-side NFS/RDMA patches proposed for v4.9 Chuck Lever
[not found] ` <20160815195649.11652.32252.stgit-FYjufvaPoItvLzlybtyyYzGyq/o6K9yX@public.gmane.org>
2016-08-15 20:50 ` [PATCH v1 01/22] xprtrdma: Eliminate INLINE_THRESHOLD macros Chuck Lever
2016-08-15 20:50 ` [PATCH v1 02/22] SUNRPC: Refactor rpc_xdr_buf_init() Chuck Lever
[not found] ` <20160815205030.11652.6620.stgit-FYjufvaPoItvLzlybtyyYzGyq/o6K9yX@public.gmane.org>
2016-08-15 21:51 ` Trond Myklebust
[not found] ` <0750E5E3-335B-4D49-8B17-45DC0A616225-7I+n7zu2hftEKMMhf/gKZA@public.gmane.org>
2016-08-16 1:24 ` Chuck Lever
2016-08-15 20:50 ` [PATCH v1 03/22] SUNRPC: Generalize the RPC buffer allocation API Chuck Lever
[not found] ` <20160815205038.11652.47749.stgit-FYjufvaPoItvLzlybtyyYzGyq/o6K9yX@public.gmane.org>
2016-08-15 21:59 ` Trond Myklebust
[not found] ` <CD81109C-4EB7-4925-9D30-852D3440ACF3-7I+n7zu2hftEKMMhf/gKZA@public.gmane.org>
2016-08-16 1:20 ` Chuck Lever
2016-08-15 20:50 ` [PATCH v1 04/22] SUNRPC: Generalize the RPC buffer release API Chuck Lever
2016-08-15 20:50 ` [PATCH v1 05/22] SUNRPC: Separate buffer pointers for RPC Call and Reply messages Chuck Lever
2016-08-15 20:51 ` [PATCH v1 06/22] SUNRPC: Add a transport-specific private field in rpc_rqst Chuck Lever
2016-08-15 20:51 ` [PATCH v1 07/22] xprtrdma: Initialize separate RPC call and reply buffers Chuck Lever
2016-08-15 20:51 ` [PATCH v1 08/22] xprtrdma: Use smaller buffers for RPC-over-RDMA headers Chuck Lever
2016-08-15 20:51 ` [PATCH v1 09/22] xprtrdma: Replace DMA_BIDIRECTIONAL Chuck Lever
2016-08-15 20:51 ` [PATCH v1 10/22] xprtrdma: Delay DMA mapping Send and Receive buffers Chuck Lever
2016-08-15 20:51 ` [PATCH v1 11/22] xprtrdma: Eliminate "ia" argument in rpcrdma_{alloc, free}_regbuf Chuck Lever
2016-08-15 20:51 ` [PATCH v1 12/22] xprtrdma: Simplify rpcrdma_ep_post_recv() Chuck Lever
2016-08-15 20:52 ` Chuck Lever [this message]
2016-08-15 20:52 ` [PATCH v1 14/22] xprtrdma: Move recv_wr to struct rpcrdma_rep Chuck Lever
2016-08-15 20:52 ` [PATCH v1 15/22] xprtrmda: Report address of frmr, not mw Chuck Lever
2016-08-15 20:52 ` [PATCH v1 16/22] rpcrdma: RDMA/CM private message data structure Chuck Lever
2016-08-15 20:52 ` [PATCH v1 17/22] xprtrdma: Client-side support for rpcrdma_connect_private Chuck Lever
2016-08-15 20:52 ` [PATCH v1 18/22] xprtrdma: Basic support for Remote Invalidation Chuck Lever
2016-08-15 20:52 ` [PATCH v1 19/22] xprtrdma: Use gathered Send for large inline messages Chuck Lever
[not found] ` <20160815205249.11652.23617.stgit-FYjufvaPoItvLzlybtyyYzGyq/o6K9yX@public.gmane.org>
2016-08-15 21:46 ` kbuild test robot
2016-08-15 20:52 ` [PATCH v1 20/22] xprtrdma: Support larger inline thresholds Chuck Lever
2016-08-15 20:53 ` [PATCH v1 21/22] xprtrdma: Rename rpcrdma_receive_wc() Chuck Lever
2016-08-15 20:53 ` [PATCH v1 22/22] xprtrdma: Eliminate rpcrdma_receive_worker() Chuck Lever
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160815205200.11652.59039.stgit@manet.1015granger.net \
--to=chuck.lever-qhclzuegtsvqt0dzr+alfa@public.gmane.org \
--cc=linux-nfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox