linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Chuck Lever <chuck.lever@oracle.com>
To: anna.schumaker@netapp.com
Cc: linux-rdma@vger.kernel.org, linux-nfs@vger.kernel.org
Subject: [PATCH v2 03/20] xprtrdma: Create more MRs at a time
Date: Mon, 01 Oct 2018 14:25:20 -0400	[thread overview]
Message-ID: <20181001182520.18578.65898.stgit@manet.1015granger.net> (raw)
In-Reply-To: <20181001182005.18578.57544.stgit@manet.1015granger.net>

Some devices require more than 3 MRs to build a single 1MB I/O.
Ensure that rpcrdma_mrs_create() will add enough MRs to build that
I/O.

In a subsequent patch I'm changing the MR recovery logic to just
toss out the MRs. In that case it's possible for ->send_request to
loop acquiring some MRs, not getting enough, getting called again,
recycling the previous MRs, then not getting enough, lather rinse
repeat. Thus first we need to ensure enough MRs are created to
prevent that loop.

I'm "reusing" ia->ri_max_segs. All of its accessors seem to want the
maximum number of data segments plus two, so I'm going to bake that
into the initial calculation.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
 net/sunrpc/xprtrdma/fmr_ops.c  |    1 +
 net/sunrpc/xprtrdma/frwr_ops.c |    1 +
 net/sunrpc/xprtrdma/rpc_rdma.c |    2 --
 net/sunrpc/xprtrdma/verbs.c    |    2 +-
 4 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/net/sunrpc/xprtrdma/fmr_ops.c b/net/sunrpc/xprtrdma/fmr_ops.c
index 0f7c465..db589a2 100644
--- a/net/sunrpc/xprtrdma/fmr_ops.c
+++ b/net/sunrpc/xprtrdma/fmr_ops.c
@@ -187,6 +187,7 @@ enum {
 
 	ia->ri_max_segs = max_t(unsigned int, 1, RPCRDMA_MAX_DATA_SEGS /
 				RPCRDMA_MAX_FMR_SGES);
+	ia->ri_max_segs += 2;	/* segments for head and tail buffers */
 	return 0;
 }
 
diff --git a/net/sunrpc/xprtrdma/frwr_ops.c b/net/sunrpc/xprtrdma/frwr_ops.c
index 1bb00dd..1cc4db5 100644
--- a/net/sunrpc/xprtrdma/frwr_ops.c
+++ b/net/sunrpc/xprtrdma/frwr_ops.c
@@ -276,6 +276,7 @@
 
 	ia->ri_max_segs = max_t(unsigned int, 1, RPCRDMA_MAX_DATA_SEGS /
 				ia->ri_max_frwr_depth);
+	ia->ri_max_segs += 2;	/* segments for head and tail buffers */
 	return 0;
 }
 
diff --git a/net/sunrpc/xprtrdma/rpc_rdma.c b/net/sunrpc/xprtrdma/rpc_rdma.c
index 293b3d3..15edc05 100644
--- a/net/sunrpc/xprtrdma/rpc_rdma.c
+++ b/net/sunrpc/xprtrdma/rpc_rdma.c
@@ -71,7 +71,6 @@ static unsigned int rpcrdma_max_call_header_size(unsigned int maxsegs)
 	size = RPCRDMA_HDRLEN_MIN;
 
 	/* Maximum Read list size */
-	maxsegs += 2;	/* segment for head and tail buffers */
 	size = maxsegs * rpcrdma_readchunk_maxsz * sizeof(__be32);
 
 	/* Minimal Read chunk size */
@@ -97,7 +96,6 @@ static unsigned int rpcrdma_max_reply_header_size(unsigned int maxsegs)
 	size = RPCRDMA_HDRLEN_MIN;
 
 	/* Maximum Write list size */
-	maxsegs += 2;	/* segment for head and tail buffers */
 	size = sizeof(__be32);		/* segment count */
 	size += maxsegs * rpcrdma_segment_maxsz * sizeof(__be32);
 	size += sizeof(__be32);	/* list discriminator */
diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c
index 956a5ea..5625a50 100644
--- a/net/sunrpc/xprtrdma/verbs.c
+++ b/net/sunrpc/xprtrdma/verbs.c
@@ -1019,7 +1019,7 @@ struct rpcrdma_sendctx *rpcrdma_sendctx_get_locked(struct rpcrdma_buffer *buf)
 	LIST_HEAD(free);
 	LIST_HEAD(all);
 
-	for (count = 0; count < 3; count++) {
+	for (count = 0; count < ia->ri_max_segs; count++) {
 		struct rpcrdma_mr *mr;
 		int rc;
 

  parent reply	other threads:[~2018-10-02  1:04 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-01 18:25 [PATCH v2 00/20] NFS/RDMA client patches for v4.20 Chuck Lever
2018-10-01 18:25 ` [PATCH v2 01/20] xprtrdma: xprt_release_rqst_cong is called outside of transport_lock Chuck Lever
2018-10-01 18:25 ` [PATCH v2 02/20] xprtrdma: Reset credit grant properly after a disconnect Chuck Lever
2018-10-01 18:25 ` Chuck Lever [this message]
2018-10-01 18:25 ` [PATCH v2 04/20] xprtrdma: Explicitly resetting MRs is no longer necessary Chuck Lever
2018-10-01 18:25 ` [PATCH v2 05/20] xprtrdma: Name MR trace events consistently Chuck Lever
2018-10-01 18:25 ` [PATCH v2 06/20] sunrpc: Fix connect metrics Chuck Lever
2018-10-01 18:25 ` [PATCH v2 07/20] sunrpc: Report connect_time in seconds Chuck Lever
2018-10-01 18:25 ` [PATCH v2 08/20] xprtrdma: Rename rpcrdma_conn_upcall Chuck Lever
2018-10-01 18:25 ` [PATCH v2 09/20] xprtrdma: Conventional variable names in rpcrdma_conn_upcall Chuck Lever
2018-10-01 18:25 ` [PATCH v2 10/20] xprtrdma: Eliminate "connstate" variable from rpcrdma_conn_upcall() Chuck Lever
2018-10-01 18:26 ` [PATCH v2 11/20] xprtrdma: Re-organize the switch() in rpcrdma_conn_upcall Chuck Lever
2018-10-01 18:26 ` [PATCH v2 12/20] xprtrdma: Simplify RPC wake-ups on connect Chuck Lever
2018-10-01 18:26 ` [PATCH v2 13/20] xprtrdma: Rename rpcrdma_qp_async_error_upcall Chuck Lever
2018-10-01 18:26 ` [PATCH v2 14/20] xprtrdma: Remove memory address of "ep" from an error message Chuck Lever
2018-10-01 18:26 ` [PATCH v2 15/20] xprtrdma: Don't disable BH's in backchannel server Chuck Lever
2018-10-01 18:26 ` [PATCH v2 16/20] xprtrdma: Move rb_flags initialization Chuck Lever
2018-10-01 18:26 ` [PATCH v2 17/20] xprtrdma: Report when there were zero posted Receives Chuck Lever
2018-10-01 18:26 ` [PATCH v2 18/20] xprtrdma: Add documenting comments Chuck Lever
2018-10-01 18:26 ` [PATCH v2 19/20] xprtrdma: Clean up xprt_rdma_disconnect_inject Chuck Lever
2018-10-01 18:26 ` [PATCH v2 20/20] xprtrdma: Squelch a sparse warning 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=20181001182520.18578.65898.stgit@manet.1015granger.net \
    --to=chuck.lever@oracle.com \
    --cc=anna.schumaker@netapp.com \
    --cc=linux-nfs@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.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;
as well as URLs for NNTP newsgroup(s).