RDS: check for valid cm_id before initiating connection
Connection could have been dropped while the route is being resolved so check for valid cm_id before initiating the connection. Reviewed-by: Ajaykumar Hotchandani <ajaykumar.hotchandani@oracle.com> Signed-off-by: Santosh Shilimkar <ssantosh@kernel.org> Signed-off-by: Santosh Shilimkar <santosh.shilimkar@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
06e8941e22
commit
ae05368afa
|
@ -34,6 +34,7 @@
|
|||
#include <rdma/rdma_cm.h>
|
||||
|
||||
#include "rdma_transport.h"
|
||||
#include "ib.h"
|
||||
|
||||
static struct rdma_cm_id *rds_rdma_listen_id;
|
||||
|
||||
|
@ -82,8 +83,18 @@ int rds_rdma_cm_event_handler(struct rdma_cm_id *cm_id,
|
|||
break;
|
||||
|
||||
case RDMA_CM_EVENT_ROUTE_RESOLVED:
|
||||
/* XXX worry about racing with listen acceptance */
|
||||
ret = trans->cm_initiate_connect(cm_id);
|
||||
/* Connection could have been dropped so make sure the
|
||||
* cm_id is valid before proceeding
|
||||
*/
|
||||
if (conn) {
|
||||
struct rds_ib_connection *ibic;
|
||||
|
||||
ibic = conn->c_transport_data;
|
||||
if (ibic && ibic->i_cm_id == cm_id)
|
||||
ret = trans->cm_initiate_connect(cm_id);
|
||||
else
|
||||
rds_conn_drop(conn);
|
||||
}
|
||||
break;
|
||||
|
||||
case RDMA_CM_EVENT_ESTABLISHED:
|
||||
|
|
Loading…
Reference in New Issue