@@ -1489,6 +1489,11 @@ int siw_connect(struct iw_cm_id *id, struct iw_cm_conn_param *params)
cep->mpa.hdr.params.pd_len = pd_len;
}
+ rv = siw_cm_queue_work(cep, SIW_CM_WORK_MPATIMEOUT);
+ if (rv != 0) {
+ goto error;
+ }
+
cep->state = SIW_EPSTATE_AWAIT_MPAREP;
rv = siw_send_mpareqrep(cep, cep->mpa.pdata,
@@ -1506,11 +1511,6 @@ int siw_connect(struct iw_cm_id *id, struct iw_cm_conn_param *params)
goto error;
}
- rv = siw_cm_queue_work(cep, SIW_CM_WORK_MPATIMEOUT);
- if (rv != 0) {
- goto error;
- }
-
siw_dbg_cep(cep, "[QP %u]: exit\n", qp_id(qp));
siw_cep_set_free(cep);
return 0;
@@ -1519,6 +1519,8 @@ int siw_connect(struct iw_cm_id *id, struct iw_cm_conn_param *params)
siw_dbg(id->device, "failed: %d\n", rv);
if (cep) {
+ siw_cancel_mpatimer(cep);
+
siw_socket_disassoc(s);
sock_release(s);
cep->sock = NULL;
The mpa timer will also span the non-blocking connect in the final patch. Fixes: 6c52fdc244b5 ("rdma/siw: connection management") Signed-off-by: Stefan Metzmacher <metze@samba.org> Cc: Bernard Metzler <bmt@zurich.ibm.com> Cc: linux-rdma@vger.kernel.org --- drivers/infiniband/sw/siw/siw_cm.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)