diff options
Diffstat (limited to 'drivers/infiniband/ulp/ipoib/ipoib_multicast.c')
| -rw-r--r-- | drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 5 | 
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c index 93e149efc1f5..9b3f47ae2016 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c @@ -816,7 +816,10 @@ void ipoib_mcast_send(struct net_device *dev, u8 *daddr, struct sk_buff *skb)  		spin_lock_irqsave(&priv->lock, flags);  		if (!neigh) {  			neigh = ipoib_neigh_alloc(daddr, dev); -			if (neigh) { +			/* Make sure that the neigh will be added only +			 * once to mcast list. +			 */ +			if (neigh && list_empty(&neigh->list)) {  				kref_get(&mcast->ah->ref);  				neigh->ah	= mcast->ah;  				list_add_tail(&neigh->list, &mcast->neigh_list);  | 

