IPoIB: Fix loss of connectivity after bonding failover on both sides
authorYossi Etigin <yosefe@Voltaire.COM>
Fri, 9 Jan 2009 22:05:11 +0000 (14:05 -0800)
committerRoland Dreier <rolandd@cisco.com>
Fri, 9 Jan 2009 22:05:11 +0000 (14:05 -0800)
commita50df398cddf6b757bdbf30f5f0875982ef5c660
treec530f13534c55c589eae41556b119d857df42898
parent6a94cb73064c952255336cc57731904174b2c58f
IPoIB: Fix loss of connectivity after bonding failover on both sides

Fix bonding failover in the case both peers failover and the
gratuitous ARP is lost.  In that case, the sender side will create an
ipoib_neigh and issue a path request with the old GID first.  When
skb->dst->neighbour->ha changes due to ARP refresh, this ipoib_neigh
will not be added to the path->list of the path of the new GID,
because the ipoib_neigh already exists.  It will not have an AH
either, because of sender-side failover.  Therefore, it will not get
an AH when the path is resolved.

The solution here is to compare GIDs in ipoib_start_xmit() even if
neigh->ah is invalid.  Comparing with an uninitialized value of
neigh->dgid should be fine, since a spurious match is harmless (and
astronomically unlikely too).

Signed-off-by: Moni Shoua <monis@voltaire.com>
Signed-off-by: Yossi Etigin <yosefe@voltaire.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/ulp/ipoib/ipoib_main.c