IPoIB: Turn on interface's carrier after broadcast group is joined
authorShirley Ma <xma@us.ibm.com>
Thu, 8 Mar 2007 22:59:30 +0000 (14:59 -0800)
committerRoland Dreier <rolandd@cisco.com>
Thu, 8 Mar 2007 22:59:30 +0000 (14:59 -0800)
Do netif_carrier_on() right after the IPv4 broadcast multicast group
is joined, rather than waiting for all of the initial set of multicast
group joins to finish.  This allows at least IPv4 traffic to limp
along on broken fabrics where not all multicast groups can be joined.

Signed-off-by: Shirley Ma <xma@us.ibm.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/ulp/ipoib/ipoib_multicast.c

index bb2e3d5eee20a8bb9fe502ae2dfb97112d0b97c3..56c87a81bb675d82a5c40c0c7f05d68ba9b80aaf 100644 (file)
@@ -407,6 +407,10 @@ static int ipoib_mcast_join_complete(int status,
                        queue_delayed_work(ipoib_workqueue,
                                           &priv->mcast_task, 0);
                mutex_unlock(&mcast_mutex);
+
+               if (mcast == priv->broadcast)
+                       netif_carrier_on(dev);
+
                return 0;
        }
 
@@ -594,7 +598,6 @@ void ipoib_mcast_join_task(struct work_struct *work)
        ipoib_dbg_mcast(priv, "successfully joined all multicast groups\n");
 
        clear_bit(IPOIB_MCAST_RUN, &priv->flags);
-       netif_carrier_on(dev);
 }
 
 int ipoib_mcast_start_thread(struct net_device *dev)