diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2014-07-29 17:26:12 -0400 |
---|---|---|
committer | Anna Schumaker <Anna.Schumaker@Netapp.com> | 2014-07-31 16:22:59 -0400 |
commit | 8079fb785e34de6dff34bd846b8b79c212861edf (patch) | |
tree | 6b8234cf74917496af466f624341e987b630bbb9 /net | |
parent | a779ca5fa766e270b9e11c162d877295e2904f4e (diff) |
xprtrdma: Handle additional connection events
Commit 38ca83a5 added RDMA_CM_EVENT_TIMEWAIT_EXIT. But that status
is relevant only for consumers that re-use their QPs on new
connections. xprtrdma creates a fresh QP on reconnection, so that
event should be explicitly ignored.
Squelch the alarming "unexpected CM event" message.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Tested-by: Steve Wise <swise@opengridcomputing.com>
Tested-by: Shirley Ma <shirley.ma@oracle.com>
Tested-by: Devesh Sharma <devesh.sharma@emulex.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/sunrpc/xprtrdma/verbs.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c index c2253d4c64df..61c41298b4ea 100644 --- a/net/sunrpc/xprtrdma/verbs.c +++ b/net/sunrpc/xprtrdma/verbs.c | |||
@@ -326,8 +326,16 @@ static const char * const conn[] = { | |||
326 | "rejected", | 326 | "rejected", |
327 | "established", | 327 | "established", |
328 | "disconnected", | 328 | "disconnected", |
329 | "device removal" | 329 | "device removal", |
330 | "multicast join", | ||
331 | "multicast error", | ||
332 | "address change", | ||
333 | "timewait exit", | ||
330 | }; | 334 | }; |
335 | |||
336 | #define CONNECTION_MSG(status) \ | ||
337 | ((status) < ARRAY_SIZE(conn) ? \ | ||
338 | conn[(status)] : "unrecognized connection error") | ||
331 | #endif | 339 | #endif |
332 | 340 | ||
333 | static int | 341 | static int |
@@ -385,23 +393,18 @@ rpcrdma_conn_upcall(struct rdma_cm_id *id, struct rdma_cm_event *event) | |||
385 | case RDMA_CM_EVENT_DEVICE_REMOVAL: | 393 | case RDMA_CM_EVENT_DEVICE_REMOVAL: |
386 | connstate = -ENODEV; | 394 | connstate = -ENODEV; |
387 | connected: | 395 | connected: |
388 | dprintk("RPC: %s: %s: %pI4:%u (ep 0x%p event 0x%x)\n", | ||
389 | __func__, | ||
390 | (event->event <= 11) ? conn[event->event] : | ||
391 | "unknown connection error", | ||
392 | &addr->sin_addr.s_addr, | ||
393 | ntohs(addr->sin_port), | ||
394 | ep, event->event); | ||
395 | atomic_set(&rpcx_to_rdmax(ep->rep_xprt)->rx_buf.rb_credits, 1); | 396 | atomic_set(&rpcx_to_rdmax(ep->rep_xprt)->rx_buf.rb_credits, 1); |
396 | dprintk("RPC: %s: %sconnected\n", | 397 | dprintk("RPC: %s: %sconnected\n", |
397 | __func__, connstate > 0 ? "" : "dis"); | 398 | __func__, connstate > 0 ? "" : "dis"); |
398 | ep->rep_connected = connstate; | 399 | ep->rep_connected = connstate; |
399 | ep->rep_func(ep); | 400 | ep->rep_func(ep); |
400 | wake_up_all(&ep->rep_connect_wait); | 401 | wake_up_all(&ep->rep_connect_wait); |
401 | break; | 402 | /*FALLTHROUGH*/ |
402 | default: | 403 | default: |
403 | dprintk("RPC: %s: unexpected CM event %d\n", | 404 | dprintk("RPC: %s: %pI4:%u (ep 0x%p): %s\n", |
404 | __func__, event->event); | 405 | __func__, &addr->sin_addr.s_addr, |
406 | ntohs(addr->sin_port), ep, | ||
407 | CONNECTION_MSG(event->event)); | ||
405 | break; | 408 | break; |
406 | } | 409 | } |
407 | 410 | ||