aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc/xprtrdma
diff options
context:
space:
mode:
Diffstat (limited to 'net/sunrpc/xprtrdma')
-rw-r--r--net/sunrpc/xprtrdma/svc_rdma.c41
-rw-r--r--net/sunrpc/xprtrdma/svc_rdma_recvfrom.c7
-rw-r--r--net/sunrpc/xprtrdma/svc_rdma_sendto.c2
-rw-r--r--net/sunrpc/xprtrdma/svc_rdma_transport.c6
-rw-r--r--net/sunrpc/xprtrdma/transport.c40
-rw-r--r--net/sunrpc/xprtrdma/verbs.c5
6 files changed, 40 insertions, 61 deletions
diff --git a/net/sunrpc/xprtrdma/svc_rdma.c b/net/sunrpc/xprtrdma/svc_rdma.c
index 35fb68b9c8ec..d718b8fa9525 100644
--- a/net/sunrpc/xprtrdma/svc_rdma.c
+++ b/net/sunrpc/xprtrdma/svc_rdma.c
@@ -40,6 +40,7 @@
40 */ 40 */
41#include <linux/module.h> 41#include <linux/module.h>
42#include <linux/init.h> 42#include <linux/init.h>
43#include <linux/slab.h>
43#include <linux/fs.h> 44#include <linux/fs.h>
44#include <linux/sysctl.h> 45#include <linux/sysctl.h>
45#include <linux/sunrpc/clnt.h> 46#include <linux/sunrpc/clnt.h>
@@ -120,8 +121,7 @@ static ctl_table svcrdma_parm_table[] = {
120 .data = &svcrdma_max_requests, 121 .data = &svcrdma_max_requests,
121 .maxlen = sizeof(unsigned int), 122 .maxlen = sizeof(unsigned int),
122 .mode = 0644, 123 .mode = 0644,
123 .proc_handler = &proc_dointvec_minmax, 124 .proc_handler = proc_dointvec_minmax,
124 .strategy = &sysctl_intvec,
125 .extra1 = &min_max_requests, 125 .extra1 = &min_max_requests,
126 .extra2 = &max_max_requests 126 .extra2 = &max_max_requests
127 }, 127 },
@@ -130,8 +130,7 @@ static ctl_table svcrdma_parm_table[] = {
130 .data = &svcrdma_max_req_size, 130 .data = &svcrdma_max_req_size,
131 .maxlen = sizeof(unsigned int), 131 .maxlen = sizeof(unsigned int),
132 .mode = 0644, 132 .mode = 0644,
133 .proc_handler = &proc_dointvec_minmax, 133 .proc_handler = proc_dointvec_minmax,
134 .strategy = &sysctl_intvec,
135 .extra1 = &min_max_inline, 134 .extra1 = &min_max_inline,
136 .extra2 = &max_max_inline 135 .extra2 = &max_max_inline
137 }, 136 },
@@ -140,8 +139,7 @@ static ctl_table svcrdma_parm_table[] = {
140 .data = &svcrdma_ord, 139 .data = &svcrdma_ord,
141 .maxlen = sizeof(unsigned int), 140 .maxlen = sizeof(unsigned int),
142 .mode = 0644, 141 .mode = 0644,
143 .proc_handler = &proc_dointvec_minmax, 142 .proc_handler = proc_dointvec_minmax,
144 .strategy = &sysctl_intvec,
145 .extra1 = &min_ord, 143 .extra1 = &min_ord,
146 .extra2 = &max_ord, 144 .extra2 = &max_ord,
147 }, 145 },
@@ -151,67 +149,65 @@ static ctl_table svcrdma_parm_table[] = {
151 .data = &rdma_stat_read, 149 .data = &rdma_stat_read,
152 .maxlen = sizeof(atomic_t), 150 .maxlen = sizeof(atomic_t),
153 .mode = 0644, 151 .mode = 0644,
154 .proc_handler = &read_reset_stat, 152 .proc_handler = read_reset_stat,
155 }, 153 },
156 { 154 {
157 .procname = "rdma_stat_recv", 155 .procname = "rdma_stat_recv",
158 .data = &rdma_stat_recv, 156 .data = &rdma_stat_recv,
159 .maxlen = sizeof(atomic_t), 157 .maxlen = sizeof(atomic_t),
160 .mode = 0644, 158 .mode = 0644,
161 .proc_handler = &read_reset_stat, 159 .proc_handler = read_reset_stat,
162 }, 160 },
163 { 161 {
164 .procname = "rdma_stat_write", 162 .procname = "rdma_stat_write",
165 .data = &rdma_stat_write, 163 .data = &rdma_stat_write,
166 .maxlen = sizeof(atomic_t), 164 .maxlen = sizeof(atomic_t),
167 .mode = 0644, 165 .mode = 0644,
168 .proc_handler = &read_reset_stat, 166 .proc_handler = read_reset_stat,
169 }, 167 },
170 { 168 {
171 .procname = "rdma_stat_sq_starve", 169 .procname = "rdma_stat_sq_starve",
172 .data = &rdma_stat_sq_starve, 170 .data = &rdma_stat_sq_starve,
173 .maxlen = sizeof(atomic_t), 171 .maxlen = sizeof(atomic_t),
174 .mode = 0644, 172 .mode = 0644,
175 .proc_handler = &read_reset_stat, 173 .proc_handler = read_reset_stat,
176 }, 174 },
177 { 175 {
178 .procname = "rdma_stat_rq_starve", 176 .procname = "rdma_stat_rq_starve",
179 .data = &rdma_stat_rq_starve, 177 .data = &rdma_stat_rq_starve,
180 .maxlen = sizeof(atomic_t), 178 .maxlen = sizeof(atomic_t),
181 .mode = 0644, 179 .mode = 0644,
182 .proc_handler = &read_reset_stat, 180 .proc_handler = read_reset_stat,
183 }, 181 },
184 { 182 {
185 .procname = "rdma_stat_rq_poll", 183 .procname = "rdma_stat_rq_poll",
186 .data = &rdma_stat_rq_poll, 184 .data = &rdma_stat_rq_poll,
187 .maxlen = sizeof(atomic_t), 185 .maxlen = sizeof(atomic_t),
188 .mode = 0644, 186 .mode = 0644,
189 .proc_handler = &read_reset_stat, 187 .proc_handler = read_reset_stat,
190 }, 188 },
191 { 189 {
192 .procname = "rdma_stat_rq_prod", 190 .procname = "rdma_stat_rq_prod",
193 .data = &rdma_stat_rq_prod, 191 .data = &rdma_stat_rq_prod,
194 .maxlen = sizeof(atomic_t), 192 .maxlen = sizeof(atomic_t),
195 .mode = 0644, 193 .mode = 0644,
196 .proc_handler = &read_reset_stat, 194 .proc_handler = read_reset_stat,
197 }, 195 },
198 { 196 {
199 .procname = "rdma_stat_sq_poll", 197 .procname = "rdma_stat_sq_poll",
200 .data = &rdma_stat_sq_poll, 198 .data = &rdma_stat_sq_poll,
201 .maxlen = sizeof(atomic_t), 199 .maxlen = sizeof(atomic_t),
202 .mode = 0644, 200 .mode = 0644,
203 .proc_handler = &read_reset_stat, 201 .proc_handler = read_reset_stat,
204 }, 202 },
205 { 203 {
206 .procname = "rdma_stat_sq_prod", 204 .procname = "rdma_stat_sq_prod",
207 .data = &rdma_stat_sq_prod, 205 .data = &rdma_stat_sq_prod,
208 .maxlen = sizeof(atomic_t), 206 .maxlen = sizeof(atomic_t),
209 .mode = 0644, 207 .mode = 0644,
210 .proc_handler = &read_reset_stat, 208 .proc_handler = read_reset_stat,
211 },
212 {
213 .ctl_name = 0,
214 }, 209 },
210 { },
215}; 211};
216 212
217static ctl_table svcrdma_table[] = { 213static ctl_table svcrdma_table[] = {
@@ -220,21 +216,16 @@ static ctl_table svcrdma_table[] = {
220 .mode = 0555, 216 .mode = 0555,
221 .child = svcrdma_parm_table 217 .child = svcrdma_parm_table
222 }, 218 },
223 { 219 { },
224 .ctl_name = 0,
225 },
226}; 220};
227 221
228static ctl_table svcrdma_root_table[] = { 222static ctl_table svcrdma_root_table[] = {
229 { 223 {
230 .ctl_name = CTL_SUNRPC,
231 .procname = "sunrpc", 224 .procname = "sunrpc",
232 .mode = 0555, 225 .mode = 0555,
233 .child = svcrdma_table 226 .child = svcrdma_table
234 }, 227 },
235 { 228 { },
236 .ctl_name = 0,
237 },
238}; 229};
239 230
240void svc_rdma_cleanup(void) 231void svc_rdma_cleanup(void)
diff --git a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
index 9e884383134f..f92e37eb413c 100644
--- a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
+++ b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
@@ -337,10 +337,9 @@ static int rdma_set_ctxt_sge(struct svcxprt_rdma *xprt,
337 337
338static int rdma_read_max_sge(struct svcxprt_rdma *xprt, int sge_count) 338static int rdma_read_max_sge(struct svcxprt_rdma *xprt, int sge_count)
339{ 339{
340 if ((RDMA_TRANSPORT_IWARP == 340 if ((rdma_node_get_transport(xprt->sc_cm_id->device->node_type) ==
341 rdma_node_get_transport(xprt->sc_cm_id-> 341 RDMA_TRANSPORT_IWARP) &&
342 device->node_type)) 342 sge_count > 1)
343 && sge_count > 1)
344 return 1; 343 return 1;
345 else 344 else
346 return min_t(int, sge_count, xprt->sc_max_sge); 345 return min_t(int, sge_count, xprt->sc_max_sge);
diff --git a/net/sunrpc/xprtrdma/svc_rdma_sendto.c b/net/sunrpc/xprtrdma/svc_rdma_sendto.c
index f11be72a1a80..b15e1ebb2bfa 100644
--- a/net/sunrpc/xprtrdma/svc_rdma_sendto.c
+++ b/net/sunrpc/xprtrdma/svc_rdma_sendto.c
@@ -54,7 +54,7 @@
54 * Assumptions: 54 * Assumptions:
55 * - head[0] is physically contiguous. 55 * - head[0] is physically contiguous.
56 * - tail[0] is physically contiguous. 56 * - tail[0] is physically contiguous.
57 * - pages[] is not physically or virtually contigous and consists of 57 * - pages[] is not physically or virtually contiguous and consists of
58 * PAGE_SIZE elements. 58 * PAGE_SIZE elements.
59 * 59 *
60 * Output: 60 * Output:
diff --git a/net/sunrpc/xprtrdma/svc_rdma_transport.c b/net/sunrpc/xprtrdma/svc_rdma_transport.c
index 3fa5751af0ec..edea15a54e51 100644
--- a/net/sunrpc/xprtrdma/svc_rdma_transport.c
+++ b/net/sunrpc/xprtrdma/svc_rdma_transport.c
@@ -43,6 +43,7 @@
43#include <linux/sunrpc/debug.h> 43#include <linux/sunrpc/debug.h>
44#include <linux/sunrpc/rpc_rdma.h> 44#include <linux/sunrpc/rpc_rdma.h>
45#include <linux/sched.h> 45#include <linux/sched.h>
46#include <linux/slab.h>
46#include <linux/spinlock.h> 47#include <linux/spinlock.h>
47#include <rdma/ib_verbs.h> 48#include <rdma/ib_verbs.h>
48#include <rdma/rdma_cm.h> 49#include <rdma/rdma_cm.h>
@@ -678,7 +679,10 @@ static struct svc_xprt *svc_rdma_create(struct svc_serv *serv,
678 int ret; 679 int ret;
679 680
680 dprintk("svcrdma: Creating RDMA socket\n"); 681 dprintk("svcrdma: Creating RDMA socket\n");
681 682 if (sa->sa_family != AF_INET) {
683 dprintk("svcrdma: Address family %d is not supported.\n", sa->sa_family);
684 return ERR_PTR(-EAFNOSUPPORT);
685 }
682 cma_xprt = rdma_create_xprt(serv, 1); 686 cma_xprt = rdma_create_xprt(serv, 1);
683 if (!cma_xprt) 687 if (!cma_xprt)
684 return ERR_PTR(-ENOMEM); 688 return ERR_PTR(-ENOMEM);
diff --git a/net/sunrpc/xprtrdma/transport.c b/net/sunrpc/xprtrdma/transport.c
index 9a63f669ece4..187257b1d880 100644
--- a/net/sunrpc/xprtrdma/transport.c
+++ b/net/sunrpc/xprtrdma/transport.c
@@ -49,6 +49,7 @@
49 49
50#include <linux/module.h> 50#include <linux/module.h>
51#include <linux/init.h> 51#include <linux/init.h>
52#include <linux/slab.h>
52#include <linux/seq_file.h> 53#include <linux/seq_file.h>
53 54
54#include "xprt_rdma.h" 55#include "xprt_rdma.h"
@@ -86,79 +87,63 @@ static struct ctl_table_header *sunrpc_table_header;
86 87
87static ctl_table xr_tunables_table[] = { 88static ctl_table xr_tunables_table[] = {
88 { 89 {
89 .ctl_name = CTL_UNNUMBERED,
90 .procname = "rdma_slot_table_entries", 90 .procname = "rdma_slot_table_entries",
91 .data = &xprt_rdma_slot_table_entries, 91 .data = &xprt_rdma_slot_table_entries,
92 .maxlen = sizeof(unsigned int), 92 .maxlen = sizeof(unsigned int),
93 .mode = 0644, 93 .mode = 0644,
94 .proc_handler = &proc_dointvec_minmax, 94 .proc_handler = proc_dointvec_minmax,
95 .strategy = &sysctl_intvec,
96 .extra1 = &min_slot_table_size, 95 .extra1 = &min_slot_table_size,
97 .extra2 = &max_slot_table_size 96 .extra2 = &max_slot_table_size
98 }, 97 },
99 { 98 {
100 .ctl_name = CTL_UNNUMBERED,
101 .procname = "rdma_max_inline_read", 99 .procname = "rdma_max_inline_read",
102 .data = &xprt_rdma_max_inline_read, 100 .data = &xprt_rdma_max_inline_read,
103 .maxlen = sizeof(unsigned int), 101 .maxlen = sizeof(unsigned int),
104 .mode = 0644, 102 .mode = 0644,
105 .proc_handler = &proc_dointvec, 103 .proc_handler = proc_dointvec,
106 .strategy = &sysctl_intvec,
107 }, 104 },
108 { 105 {
109 .ctl_name = CTL_UNNUMBERED,
110 .procname = "rdma_max_inline_write", 106 .procname = "rdma_max_inline_write",
111 .data = &xprt_rdma_max_inline_write, 107 .data = &xprt_rdma_max_inline_write,
112 .maxlen = sizeof(unsigned int), 108 .maxlen = sizeof(unsigned int),
113 .mode = 0644, 109 .mode = 0644,
114 .proc_handler = &proc_dointvec, 110 .proc_handler = proc_dointvec,
115 .strategy = &sysctl_intvec,
116 }, 111 },
117 { 112 {
118 .ctl_name = CTL_UNNUMBERED,
119 .procname = "rdma_inline_write_padding", 113 .procname = "rdma_inline_write_padding",
120 .data = &xprt_rdma_inline_write_padding, 114 .data = &xprt_rdma_inline_write_padding,
121 .maxlen = sizeof(unsigned int), 115 .maxlen = sizeof(unsigned int),
122 .mode = 0644, 116 .mode = 0644,
123 .proc_handler = &proc_dointvec_minmax, 117 .proc_handler = proc_dointvec_minmax,
124 .strategy = &sysctl_intvec,
125 .extra1 = &zero, 118 .extra1 = &zero,
126 .extra2 = &max_padding, 119 .extra2 = &max_padding,
127 }, 120 },
128 { 121 {
129 .ctl_name = CTL_UNNUMBERED,
130 .procname = "rdma_memreg_strategy", 122 .procname = "rdma_memreg_strategy",
131 .data = &xprt_rdma_memreg_strategy, 123 .data = &xprt_rdma_memreg_strategy,
132 .maxlen = sizeof(unsigned int), 124 .maxlen = sizeof(unsigned int),
133 .mode = 0644, 125 .mode = 0644,
134 .proc_handler = &proc_dointvec_minmax, 126 .proc_handler = proc_dointvec_minmax,
135 .strategy = &sysctl_intvec,
136 .extra1 = &min_memreg, 127 .extra1 = &min_memreg,
137 .extra2 = &max_memreg, 128 .extra2 = &max_memreg,
138 }, 129 },
139 { 130 {
140 .ctl_name = CTL_UNNUMBERED,
141 .procname = "rdma_pad_optimize", 131 .procname = "rdma_pad_optimize",
142 .data = &xprt_rdma_pad_optimize, 132 .data = &xprt_rdma_pad_optimize,
143 .maxlen = sizeof(unsigned int), 133 .maxlen = sizeof(unsigned int),
144 .mode = 0644, 134 .mode = 0644,
145 .proc_handler = &proc_dointvec, 135 .proc_handler = proc_dointvec,
146 },
147 {
148 .ctl_name = 0,
149 }, 136 },
137 { },
150}; 138};
151 139
152static ctl_table sunrpc_table[] = { 140static ctl_table sunrpc_table[] = {
153 { 141 {
154 .ctl_name = CTL_SUNRPC,
155 .procname = "sunrpc", 142 .procname = "sunrpc",
156 .mode = 0555, 143 .mode = 0555,
157 .child = xr_tunables_table 144 .child = xr_tunables_table
158 }, 145 },
159 { 146 { },
160 .ctl_name = 0,
161 },
162}; 147};
163 148
164#endif 149#endif
@@ -176,16 +161,15 @@ xprt_rdma_format_addresses(struct rpc_xprt *xprt)
176 (void)rpc_ntop(sap, buf, sizeof(buf)); 161 (void)rpc_ntop(sap, buf, sizeof(buf));
177 xprt->address_strings[RPC_DISPLAY_ADDR] = kstrdup(buf, GFP_KERNEL); 162 xprt->address_strings[RPC_DISPLAY_ADDR] = kstrdup(buf, GFP_KERNEL);
178 163
179 (void)snprintf(buf, sizeof(buf), "%u", rpc_get_port(sap)); 164 snprintf(buf, sizeof(buf), "%u", rpc_get_port(sap));
180 xprt->address_strings[RPC_DISPLAY_PORT] = kstrdup(buf, GFP_KERNEL); 165 xprt->address_strings[RPC_DISPLAY_PORT] = kstrdup(buf, GFP_KERNEL);
181 166
182 xprt->address_strings[RPC_DISPLAY_PROTO] = "rdma"; 167 xprt->address_strings[RPC_DISPLAY_PROTO] = "rdma";
183 168
184 (void)snprintf(buf, sizeof(buf), "%02x%02x%02x%02x", 169 snprintf(buf, sizeof(buf), "%08x", ntohl(sin->sin_addr.s_addr));
185 NIPQUAD(sin->sin_addr.s_addr));
186 xprt->address_strings[RPC_DISPLAY_HEX_ADDR] = kstrdup(buf, GFP_KERNEL); 170 xprt->address_strings[RPC_DISPLAY_HEX_ADDR] = kstrdup(buf, GFP_KERNEL);
187 171
188 (void)snprintf(buf, sizeof(buf), "%4hx", rpc_get_port(sap)); 172 snprintf(buf, sizeof(buf), "%4hx", rpc_get_port(sap));
189 xprt->address_strings[RPC_DISPLAY_HEX_PORT] = kstrdup(buf, GFP_KERNEL); 173 xprt->address_strings[RPC_DISPLAY_HEX_PORT] = kstrdup(buf, GFP_KERNEL);
190 174
191 /* netid */ 175 /* netid */
diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c
index 465aafc2007f..27015c6d8eb5 100644
--- a/net/sunrpc/xprtrdma/verbs.c
+++ b/net/sunrpc/xprtrdma/verbs.c
@@ -48,6 +48,7 @@
48 */ 48 */
49 49
50#include <linux/pci.h> /* for Tavor hack below */ 50#include <linux/pci.h> /* for Tavor hack below */
51#include <linux/slab.h>
51 52
52#include "xprt_rdma.h" 53#include "xprt_rdma.h"
53 54
@@ -878,8 +879,8 @@ if (strnicmp(ia->ri_id->device->dma_device->bus->name, "pci", 3) == 0) {
878 * others indicate a transport condition which has already 879 * others indicate a transport condition which has already
879 * undergone a best-effort. 880 * undergone a best-effort.
880 */ 881 */
881 if (ep->rep_connected == -ECONNREFUSED 882 if (ep->rep_connected == -ECONNREFUSED &&
882 && ++retry_count <= RDMA_CONNECT_RETRY_MAX) { 883 ++retry_count <= RDMA_CONNECT_RETRY_MAX) {
883 dprintk("RPC: %s: non-peer_reject, retry\n", __func__); 884 dprintk("RPC: %s: non-peer_reject, retry\n", __func__);
884 goto retry; 885 goto retry;
885 } 886 }