staging: lustre: Change connect peer failed cleanup order
A race condition has been found where connd is cleaning up failed connections, the peer ref counter goes to zero, but we stil have a connecting counter > 0. One possible race is when we are retrying a connection by calling kiblnd_connect_peer() which itself fails and decrements the peer ref counter and gets swapped out before it can decrement the connecting counter. connd swaps in and cleans up the connection where it sees a peer ref counter of 1 and a connecting counter of 1. This will trigger the assert seen in LU-7210 when it decrements the peer counter. The solution: be sure to decrement the connecting counter before decrementing the peer counter in the peer connect failure path. Signed-off-by: Doug Oucharek <doug.s.oucharek@intel.com> Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-7210 Reviewed-on: http://review.whamcloud.com/17004 Reviewed-by: James Simmons <uja.ornl@yahoo.com> Reviewed-by: Amir Shehata <amir.shehata@intel.com> Reviewed-by: Oleg Drokin <oleg.drokin@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
992f0b226e
commit
a70d69ae88
|
@ -1298,8 +1298,10 @@ kiblnd_connect_peer(kib_peer_t *peer)
|
|||
return;
|
||||
|
||||
failed2:
|
||||
kiblnd_peer_connect_failed(peer, 1, rc);
|
||||
kiblnd_peer_decref(peer); /* cmid's ref */
|
||||
rdma_destroy_id(cmid);
|
||||
return;
|
||||
failed:
|
||||
kiblnd_peer_connect_failed(peer, 1, rc);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue