1
linux/drivers/infiniband/ulp/ipoib
Or Gerlitz b3e2749bf3 IPoIB: Don't drop multicast sends when they can be queued
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 packets are
painful in two cases:

 - bonding fail-over which both calls set_multicast_list() on the new
   active slave and sends Gratuitous ARP through that slave.

 - IP_DROP_MEMBERSHIP code which both calls set_multicast_list() on the
   device and issues IGMP leave.

In both these cases, depending on the scheduling of the IPoIB
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 neighbour is renewed the neighbour (which takes a 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 a
delay of at least a few tens of seconds).

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

Signed-off-by: Olga Shern <olgas@voltaire.com>
Signed-off-by: Or Gerlitz <ogerlitz@voltaire.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
2008-03-11 14:12:03 -07:00
..
ipoib_cm.c IPoIB/cm: Fix ipoib_cm_dev_stop() cleanup when drain times out 2008-02-19 10:25:11 -08:00
ipoib_fs.c IPoIB: Constify seq_operations function pointer tables 2008-01-25 14:17:46 -08:00
ipoib_ib.c IPoIB: On P_Key change event, reset state properly 2008-02-14 10:15:06 -08:00
ipoib_main.c IPoIB: Add high DMA feature flag 2008-02-08 13:39:26 -08:00
ipoib_multicast.c IPoIB: Don't drop multicast sends when they can be queued 2008-03-11 14:12:03 -07:00
ipoib_verbs.c IPoIB: Add send gather support 2008-02-08 14:32:37 -08:00
ipoib_vlan.c
ipoib.h IPoIB: Remove unused struct ipoib_cm_tx.ibwc member 2008-02-14 10:30:50 -08:00
Kconfig
Makefile