[ofa-general] A question regarding multicast send

Moni Shoua monis at voltaire.com
Mon Mar 3 06:53:28 PST 2008


Hi,

The following refers to code in ipoib_mcast_send()
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=drivers/infiniband/ulp/ipoib/ipoib_multicast.c;h=2628339e3a9973b01402250f8e6bf73be5d37c04;hb=HEAD#l642


Some background before the question:

I am testing bonding with IPoIB now and I see that sometimes grat. ARP 
are not being sent when one of the slaves gets down and another takes 
its place as an active slave (Grat. arps are necessary for reasonable 
failover). A short research shows that the bonding module sets the 
multicast list for the new active slave and this causes multicast task 
restart. When grat. arp arrives to ipoib_mcast_send() it finds that the 
flag IPOIB_MCAST_STARTED is not set and the packet is dropped. This 
doesn't happen all the times. Sometimes the grat. arp arrives to 
ipoib_mcast_send() when IPOIB_MCAST_STARTED is set and packet is sent.

Now, my question is:

This code is found in the begging of ipoib_mcast_send().

if (!test_bit(IPOIB_MCAST_STARTED, &priv->flags)	||
	!priv->broadcast					||
	!test_bit(IPOIB_MCAST_FLAG_ATTACHED,&priv->broadcast->flags)){
		++dev->stats.tx_dropped;
		dev_kfree_skb_any(skb);
		goto unlock;
}

I wonder, why isn't it possible to
1. Not to drop the packet (at least for the case when 
IPOIB_MCAST_STARTED is cleared).
2. look for/create mcast structure (already in code)
3. put skb in &mcast->pkt_queue (enhabce the condition !mcast->ah)


thanks
  MoniS







More information about the general mailing list