diff --git a/lnet/klnds/o2iblnd/o2iblnd.c b/lnet/klnds/o2iblnd/o2iblnd.c index 66b8b616d4c8896910f52115bfcc97f88915049b..d1ea6a26ffeda10f0447b7770f71a33db4ff7858 100644 --- a/lnet/klnds/o2iblnd/o2iblnd.c +++ b/lnet/klnds/o2iblnd/o2iblnd.c @@ -982,7 +982,8 @@ kiblnd_create_conn(kib_peer_ni_t *peer_ni, struct rdma_cm_id *cmid, return conn; failed_2: - kiblnd_destroy_conn(conn, true); + kiblnd_destroy_conn(conn); + LIBCFS_FREE(conn, sizeof(*conn)); failed_1: LIBCFS_FREE(init_qp_attr, sizeof(*init_qp_attr)); failed_0: @@ -990,7 +991,7 @@ kiblnd_create_conn(kib_peer_ni_t *peer_ni, struct rdma_cm_id *cmid, } void -kiblnd_destroy_conn(kib_conn_t *conn, bool free_conn) +kiblnd_destroy_conn(kib_conn_t *conn) { struct rdma_cm_id *cmid = conn->ibc_cmid; kib_peer_ni_t *peer_ni = conn->ibc_peer; @@ -1052,9 +1053,6 @@ kiblnd_destroy_conn(kib_conn_t *conn, bool free_conn) rdma_destroy_id(cmid); atomic_dec(&net->ibn_nconns); } - - if (free_conn) - LIBCFS_FREE(conn, sizeof(*conn)); } int diff --git a/lnet/klnds/o2iblnd/o2iblnd.h b/lnet/klnds/o2iblnd/o2iblnd.h index 811b102bf936ba257e006fdd442a03b8edd22532..7a465aa0d99b7c07823408a400a2ec87fa91efab 100644 --- a/lnet/klnds/o2iblnd/o2iblnd.h +++ b/lnet/klnds/o2iblnd/o2iblnd.h @@ -1180,7 +1180,7 @@ int kiblnd_close_peer_conns_locked (kib_peer_ni_t *peer_ni, int why); kib_conn_t *kiblnd_create_conn(kib_peer_ni_t *peer_ni, struct rdma_cm_id *cmid, int state, int version); -void kiblnd_destroy_conn(kib_conn_t *conn, bool free_conn); +void kiblnd_destroy_conn(kib_conn_t *conn); void kiblnd_close_conn (kib_conn_t *conn, int error); void kiblnd_close_conn_locked (kib_conn_t *conn, int error); diff --git a/lnet/klnds/o2iblnd/o2iblnd_cb.c b/lnet/klnds/o2iblnd/o2iblnd_cb.c index 6ef13fbe59908f69e96c02b4ae32ad7fab3ec891..f1ed1d9513e3bef77b377e7360bb91eaf55bdc8e 100644 --- a/lnet/klnds/o2iblnd/o2iblnd_cb.c +++ b/lnet/klnds/o2iblnd/o2iblnd_cb.c @@ -3392,11 +3392,13 @@ kiblnd_connd (void *arg) spin_unlock_irqrestore(lock, flags); dropped_lock = 1; - kiblnd_destroy_conn(conn, !peer_ni); + kiblnd_destroy_conn(conn); spin_lock_irqsave(lock, flags); - if (!peer_ni) + if (!peer_ni) { + LIBCFS_FREE(conn, sizeof(*conn)); continue; + } conn->ibc_peer = peer_ni; if (peer_ni->ibp_reconnected < KIB_RECONN_HIGH_RACE)