]> git.baikalelectronics.ru Git - kernel.git/commit
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)
commitd0c7c50e6096b71d87929d70c0609986401855b7
treec530f13534c55c589eae41556b119d857df42898
parent68e3ffccc5c98abce2e70883a60fe414469e26fb
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