On 6/15/22 4:40 PM, Stefan Metzmacher wrote:
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@xxxxxxxxx>
Cc: Bernard Metzler <bmt@xxxxxxxxxxxxxx>
Cc: linux-rdma@xxxxxxxxxxxxxxx
---
drivers/infiniband/sw/siw/siw_cm.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/drivers/infiniband/sw/siw/siw_cm.c b/drivers/infiniband/sw/siw/siw_cm.c
index b19a2b777814..3fee1d4ef252 100644
--- a/drivers/infiniband/sw/siw/siw_cm.c
+++ b/drivers/infiniband/sw/siw/siw_cm.c
@@ -1476,6 +1476,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;
Here starts the MPA timer, but the cep->state is SIW_EPSTATE_CONNECTING.
Consider the case when the connection timeout: the MPA timeout handler
will release resources if cep->state is SIW_EPSTATE_AWAIT_MPAREP and
SIW_EPSTATE_AWAIT_MPAREQ, not including SIW_EPSTATE_CONNECTING.
I think you should handle this case in the MPA timeout handler: report
a cm event and set release_cep with 1. Otherwise it will cause resource
leak.
Thanks,
Cheng Xu