[ofa-general] [PATCH 2/4] ipoib: fix loss of connectivity after bonding failover on both sides

Roland Dreier rdreier at cisco.com
Wed Jan 7 11:27:52 PST 2009


 > also
 > initiallize neigh->dgid.raw to have value to compare with.

I don't see this anywhere in the patch you sent?  Here's the whole thing:
(btw only one "L" in "initialize")

 > --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c	2008-12-15 19:53:16.000000000 +0200
 > +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c	2008-12-15 19:53:37.000000000 +0200
 > @@ -687,26 +687,26 @@ static int ipoib_start_xmit(struct sk_bu
 > 
 > 		neigh = *to_ipoib_neigh(skb->dst->neighbour);
 > 
 > -		if (neigh->ah)
 > -			if (unlikely((memcmp(&neigh->dgid.raw,
 > -					    skb->dst->neighbour->ha + 4,
 > -					    sizeof(union ib_gid))) ||
 > -					 (neigh->dev != dev))) {
 > -				spin_lock_irqsave(&priv->lock, flags);
 > -				/*
 > -				 * It's safe to call ipoib_put_ah() inside
 > -				 * priv->lock here, because we know that
 > -				 * path->ah will always hold one more reference,
 > -				 * so ipoib_put_ah() will never do more than
 > -				 * decrement the ref count.
 > -				 */
 > +		if (unlikely((memcmp(&neigh->dgid.raw,
 > +		                     skb->dst->neighbour->ha + 4,
 > +		                     sizeof(union ib_gid))) ||
 > +		             (neigh->dev != dev))) {
 > +			spin_lock_irqsave(&priv->lock, flags);
 > +			/*
 > +			 * It's safe to call ipoib_put_ah() inside
 > +			 * priv->lock here, because we know that
 > +			 * path->ah will always hold one more reference,
 > +			 * so ipoib_put_ah() will never do more than
 > +			 * decrement the ref count.
 > +			 */
 > +			if (neigh->ah)
 > 				ipoib_put_ah(neigh->ah);
 > -				list_del(&neigh->list);
 > -				ipoib_neigh_free(dev, neigh);
 > -				spin_unlock_irqrestore(&priv->lock, flags);
 > -				ipoib_path_lookup(skb, dev);
 > -				return NETDEV_TX_OK;
 > -			}
 > +			list_del(&neigh->list);
 > +			ipoib_neigh_free(dev, neigh);
 > +			spin_unlock_irqrestore(&priv->lock, flags);
 > +			ipoib_path_lookup(skb, dev);
 > +			return NETDEV_TX_OK;
 > +		}
 > 
 > 		if (ipoib_cm_get(neigh)) {
 > 			if (ipoib_cm_up(neigh)) {



More information about the general mailing list