• Yossi Etigin's avatar
    IPoIB: Fix loss of connectivity after bonding failover on both sides · a50df398
    Yossi Etigin authored
    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: default avatarMoni Shoua <monis@voltaire.com>
    Signed-off-by: default avatarYossi Etigin <yosefe@voltaire.com>
    Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
    a50df398
ipoib_main.c 35.4 KB