diff options
author | Roland Dreier <rolandd@cisco.com> | 2008-09-25 15:26:15 -0700 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2008-09-25 15:26:15 -0700 |
commit | c9da4bad5b80c3d9884e2c6ad8d2091252c32d5e (patch) | |
tree | 6b954f1ae170ffbbe522e38e3e69f44fc92f3689 /drivers/infiniband/ulp/ipoib/ipoib_cm.c | |
parent | 9824b8f11373b0df806c135a342da9319ef1d893 (diff) |
IPoIB: Fix crash when path record fails after path flush
Commit ee1e2c82 ("IPoIB: Refresh paths instead of flushing them on SM
change events") changed how paths are flushed on an SM event. This
change introduces a problem if the path record query triggered by
fails, causing path->ah to become NULL. A later successful path query
will then trigger WARN_ON() in path_rec_completion(), and crash
because path->ah has already been freed, so the ipoib_put_ah() inside
the lock in path_rec_completion() may actually drop the last reference
(contrary to the comment that claims this is safe).
Fix this by updating path->ah and freeing old_ah only when the path
record query is successful. This prevents the neighbour AH and that
path AH from getting out of sync.
This fixes <https://bugs.openfabrics.org/show_bug.cgi?id=1194>
Reported-by: Rabah Salem <ravah@mellanox.com>
Debugged-by: Eli Cohen <eli@mellanox.co.il>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/ulp/ipoib/ipoib_cm.c')
0 files changed, 0 insertions, 0 deletions