When set_multicast_list is called the multicast task is restarted and the 
IPOIB_MCAST_STARTED
bit is cleared. As a result for some window of time, multicast packets are not 
transmitted nor
queued but rather dropped by ipoib_mcast_send. These dropped are painful 
specifically under
two flows: first, bonding fail-over which both calls set_multicast_list on the 
new active
slave and sends Gratuitous ARP through that slave, and second, 
IP_DROP_MEMBERSHIP code which
both calls set_multicast_list on the device and issues IGMP leave. On both 
these cases,
depending on the scheduling of the multicast task, the packets would be 
dropped. As a
result in the bonding case, the failover would not be detected by the peers 
until their
neighbouring subsystem will renew the neighbour (few tens of seconds). In the 
IGMP case,
the IP router doesn't get an IGMP leave and would only learn on that from 
further probes
on the group (also delay of at least few tens of seconds).

Fix this by allowing transmission (or queuing) depending on the 
IPOIB_FLAG_OPER_UP flag.

Signed-off-by: Olga Shern <[EMAIL PROTECTED]>
Signed-off-by: Or Gerlitz <[EMAIL PROTECTED]>

Index: linux-2.6.25-rc4/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
===================================================================
--- linux-2.6.25-rc4.orig/drivers/infiniband/ulp/ipoib/ipoib_multicast.c        
2008-03-11 11:51:38.000000000 +0200
+++ linux-2.6.25-rc4/drivers/infiniband/ulp/ipoib/ipoib_multicast.c     
2008-03-11 15:10:17.000000000 +0200
@@ -650,7 +650,7 @@ void ipoib_mcast_send(struct net_device
         */
        spin_lock(&priv->lock);

-       if (!test_bit(IPOIB_MCAST_STARTED, &priv->flags)        ||
+       if (!test_bit(IPOIB_FLAG_OPER_UP, &priv->flags) ||
            !priv->broadcast                                    ||
            !test_bit(IPOIB_MCAST_FLAG_ATTACHED, &priv->broadcast->flags)) {
                ++dev->stats.tx_dropped;
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to