[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