aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2017-04-09 13:06:57 -0400
committerJ. Bruce Fields <bfields@redhat.com>2017-04-25 17:25:55 -0400
commitded8d19641a605232ab48f5d27f542648beba3cc (patch)
tree8152393c9a9373dd1b43cc3ebba1756792135984
parentf5821c76b2c9c2fb98b276c0bf6a101bfe9050a3 (diff)
svcrdma: Reduce size of sge array in struct svc_rdma_op_ctxt
The sge array in struct svc_rdma_op_ctxt is no longer used for sending RDMA Write WRs. It need only accommodate the construction of Send and Receive WRs. The maximum inline size is the largest payload it needs to handle now. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Reviewed-by: Sagi Grimberg <sagi@grimberg.me> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
-rw-r--r--include/linux/sunrpc/svc_rdma.h9
-rw-r--r--net/sunrpc/xprtrdma/svc_rdma.c6
2 files changed, 10 insertions, 5 deletions
diff --git a/include/linux/sunrpc/svc_rdma.h b/include/linux/sunrpc/svc_rdma.h
index 44d642bbfce6..e84b77556784 100644
--- a/include/linux/sunrpc/svc_rdma.h
+++ b/include/linux/sunrpc/svc_rdma.h
@@ -48,6 +48,12 @@
48#include <rdma/rdma_cm.h> 48#include <rdma/rdma_cm.h>
49#define SVCRDMA_DEBUG 49#define SVCRDMA_DEBUG
50 50
51/* Default and maximum inline threshold sizes */
52enum {
53 RPCRDMA_DEF_INLINE_THRESH = 4096,
54 RPCRDMA_MAX_INLINE_THRESH = 65536
55};
56
51/* RPC/RDMA parameters and stats */ 57/* RPC/RDMA parameters and stats */
52extern unsigned int svcrdma_ord; 58extern unsigned int svcrdma_ord;
53extern unsigned int svcrdma_max_requests; 59extern unsigned int svcrdma_max_requests;
@@ -86,7 +92,7 @@ struct svc_rdma_op_ctxt {
86 int count; 92 int count;
87 unsigned int mapped_sges; 93 unsigned int mapped_sges;
88 struct ib_send_wr send_wr; 94 struct ib_send_wr send_wr;
89 struct ib_sge sge[RPCSVC_MAXPAGES]; 95 struct ib_sge sge[1 + RPCRDMA_MAX_INLINE_THRESH / PAGE_SIZE];
90 struct page *pages[RPCSVC_MAXPAGES]; 96 struct page *pages[RPCSVC_MAXPAGES];
91}; 97};
92 98
@@ -186,7 +192,6 @@ struct svcxprt_rdma {
186 * page size of 4k, or 32k * 2 ops / 4k = 16 outstanding RDMA_READ. */ 192 * page size of 4k, or 32k * 2 ops / 4k = 16 outstanding RDMA_READ. */
187#define RPCRDMA_ORD (64/4) 193#define RPCRDMA_ORD (64/4)
188#define RPCRDMA_MAX_REQUESTS 32 194#define RPCRDMA_MAX_REQUESTS 32
189#define RPCRDMA_MAX_REQ_SIZE 4096
190 195
191/* Typical ULP usage of BC requests is NFSv4.1 backchannel. Our 196/* Typical ULP usage of BC requests is NFSv4.1 backchannel. Our
192 * current NFSv4.1 implementation supports one backchannel slot. 197 * current NFSv4.1 implementation supports one backchannel slot.
diff --git a/net/sunrpc/xprtrdma/svc_rdma.c b/net/sunrpc/xprtrdma/svc_rdma.c
index 912444174647..a4a8f6989ee7 100644
--- a/net/sunrpc/xprtrdma/svc_rdma.c
+++ b/net/sunrpc/xprtrdma/svc_rdma.c
@@ -58,9 +58,9 @@ unsigned int svcrdma_max_requests = RPCRDMA_MAX_REQUESTS;
58unsigned int svcrdma_max_bc_requests = RPCRDMA_MAX_BC_REQUESTS; 58unsigned int svcrdma_max_bc_requests = RPCRDMA_MAX_BC_REQUESTS;
59static unsigned int min_max_requests = 4; 59static unsigned int min_max_requests = 4;
60static unsigned int max_max_requests = 16384; 60static unsigned int max_max_requests = 16384;
61unsigned int svcrdma_max_req_size = RPCRDMA_MAX_REQ_SIZE; 61unsigned int svcrdma_max_req_size = RPCRDMA_DEF_INLINE_THRESH;
62static unsigned int min_max_inline = 4096; 62static unsigned int min_max_inline = RPCRDMA_DEF_INLINE_THRESH;
63static unsigned int max_max_inline = 65536; 63static unsigned int max_max_inline = RPCRDMA_MAX_INLINE_THRESH;
64 64
65atomic_t rdma_stat_recv; 65atomic_t rdma_stat_recv;
66atomic_t rdma_stat_read; 66atomic_t rdma_stat_read;