This is basically the same just that the code in __siw_cep_close() common, it skips elements which are still NULL. Before it was really hard to prove that we don't deference NULL pointers. While developing my smbdirect driver, I hit so much crashes and deadlocks, so we better have code that's understandable. 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 | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/drivers/infiniband/sw/siw/siw_cm.c b/drivers/infiniband/sw/siw/siw_cm.c index 09ae7f7ca82a..7fd67499f1d3 100644 --- a/drivers/infiniband/sw/siw/siw_cm.c +++ b/drivers/infiniband/sw/siw/siw_cm.c @@ -1833,23 +1833,7 @@ int siw_accept(struct iw_cm_id *id, struct iw_cm_conn_param *params) return 0; error: - siw_socket_disassoc(cep->sock); - sock_release(cep->sock); - cep->sock = NULL; - - cep->state = SIW_EPSTATE_CLOSED; - - if (cep->cm_id) { - cep->cm_id->rem_ref(id); - cep->cm_id = NULL; - } - if (qp->cep) { - siw_cep_put(cep); - qp->cep = NULL; - } - cep->qp = NULL; - siw_qp_put(qp); - + __siw_cep_close(cep); siw_cep_set_free(cep); siw_cep_put(cep); -- 2.25.1