[ipoib] Attempt the broadcast group join only if the link is up
authorMichael Brown <mcb30@etherboot.org>
Tue, 7 Jul 2009 18:14:52 +0000 (19:14 +0100)
committerMichael Brown <mcb30@etherboot.org>
Fri, 17 Jul 2009 22:06:34 +0000 (23:06 +0100)
Attempting the broadcast group join while the link is down is
harmless, but can generate annoying volumes of debug messages.

src/drivers/net/ipoib.c

index 4c924d1..c5b2b43 100644 (file)
@@ -535,17 +535,11 @@ static int ipoib_open ( struct net_device *netdev ) {
        /* Fill receive rings */
        ib_refill_recv ( ibdev, ipoib->qp );
 
        /* Fill receive rings */
        ib_refill_recv ( ibdev, ipoib->qp );
 
-       /* Join broadcast group */
-       if ( ( rc = ipoib_join_broadcast_group ( ipoib ) ) != 0 ) {
-               DBGC ( ipoib, "IPoIB %p could not join broadcast group: %s\n",
-                      ipoib, strerror ( rc ) );
-               goto err_join_broadcast;
-       }
+       /* Fake a link status change to join the broadcast group */
+       ipoib_link_state_changed ( ibdev );
 
        return 0;
 
 
        return 0;
 
-       ipoib_leave_broadcast_group ( ipoib );
- err_join_broadcast:
        ib_destroy_qp ( ibdev, ipoib->qp );
  err_create_qp:
        ib_destroy_cq ( ibdev, ipoib->cq );
        ib_destroy_qp ( ibdev, ipoib->qp );
  err_create_qp:
        ib_destroy_cq ( ibdev, ipoib->cq );
@@ -639,7 +633,8 @@ void ipoib_link_state_changed ( struct ib_device *ibdev ) {
        ipoib_set_ib_params ( ipoib );
 
        /* Join new broadcast group */
        ipoib_set_ib_params ( ipoib );
 
        /* Join new broadcast group */
-       if ( ( rc = ipoib_join_broadcast_group ( ipoib ) ) != 0 ) {
+       if ( ib_link_ok ( ibdev ) &&
+            ( ( rc = ipoib_join_broadcast_group ( ipoib ) ) != 0 ) ) {
                DBGC ( ipoib, "IPoIB %p could not rejoin broadcast group: "
                       "%s\n", ipoib, strerror ( rc ) );
                return;
                DBGC ( ipoib, "IPoIB %p could not rejoin broadcast group: "
                       "%s\n", ipoib, strerror ( rc ) );
                return;