aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2014-07-29 17:26:12 -0400
committerAnna Schumaker <Anna.Schumaker@Netapp.com>2014-07-31 16:22:59 -0400
commit8079fb785e34de6dff34bd846b8b79c212861edf (patch)
tree6b8234cf74917496af466f624341e987b630bbb9 /net
parenta779ca5fa766e270b9e11c162d877295e2904f4e (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.c25
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
333static int 341static 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;
387connected: 395connected:
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