• Doug Ledford's avatar
    RDMA/ipoib: Update paths on CLIENT_REREG/SM_CHANGE events · fa9391db
    Doug Ledford authored
    We do a light flush on CLIENT_REREG and SM_CHANGE events.  This goes
    through and marks paths invalid. But we weren't always checking for this
    validity when we needed to, and so we could keep using a path marked
    invalid.  What's more, once we establish a path with a valid ah, we put
    a pointer to the ah in the neigh struct directly, so even if we mark the
    path as invalid, as long as the neigh has a direct pointer to the ah, it
    keeps using the old, outdated ah.
    
    To fix this we do several things.
    
    1) Put the valid flag in the ah instead of the path struct, so when we
    put the ah pointer directly in the neigh struct, we can easily check the
    validity of the ah on send events.
    2) Check the neigh->ah and neigh->ah->valid elements in the needed
    places, and if we have an ah, but it's invalid, then invoke a refresh of
    the ah.
    3) Fix the various places that check for path, but didn't check for
    path->valid (now path->ah && path->ah->valid).
    Reported-by: default avatarEvgenii Smirnov <evgenii.smirnov@profitbricks.com>
    Fixes: ee1e2c82 ("IPoIB: Refresh paths instead of flushing them on SM change events")
    Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
    fa9391db
ipoib_main.c 62.4 KB