RDMA/siw: Cleanup siw_accept
authorGuoqing Jiang <guoqing.jiang@linux.dev>
Mon, 13 Nov 2023 11:57:21 +0000 (19:57 +0800)
committerLeon Romanovsky <leon@kernel.org>
Wed, 15 Nov 2023 13:58:14 +0000 (15:58 +0200)
With the initialization of rv and the two added label, we can
simplifiy code a bit.

Acked-by: Bernard Metzler <bmt@zurich.ibm.com>
Signed-off-by: Guoqing Jiang <guoqing.jiang@linux.dev>
Link: https://lore.kernel.org/r/20231113115726.12762-13-guoqing.jiang@linux.dev
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/sw/siw/siw_cm.c

index 36fd459..5e9a591 100644 (file)
@@ -1558,7 +1558,7 @@ int siw_accept(struct iw_cm_id *id, struct iw_cm_conn_param *params)
        struct siw_cep *cep = (struct siw_cep *)id->provider_data;
        struct siw_qp *qp;
        struct siw_qp_attrs qp_attrs;
-       int rv, max_priv_data = MPA_MAX_PRIVDATA;
+       int rv = -EINVAL, max_priv_data = MPA_MAX_PRIVDATA;
        bool wait_for_peer_rts = false;
 
        siw_cep_set_inuse(cep);
@@ -1574,24 +1574,17 @@ int siw_accept(struct iw_cm_id *id, struct iw_cm_conn_param *params)
 
        if (cep->state != SIW_EPSTATE_RECVD_MPAREQ) {
                siw_dbg_cep(cep, "out of state\n");
-
-               siw_cep_set_free_and_put(cep);
-
-               return -ECONNRESET;
+               rv = -ECONNRESET;
+               goto free_cep;
        }
        qp = siw_qp_id2obj(sdev, params->qpn);
        if (!qp) {
                WARN(1, "[QP %d] does not exist\n", params->qpn);
-               siw_cep_set_free_and_put(cep);
-
-               return -EINVAL;
+               goto free_cep;
        }
        down_write(&qp->state_lock);
-       if (qp->attrs.state > SIW_QP_STATE_RTR) {
-               rv = -EINVAL;
-               up_write(&qp->state_lock);
-               goto error;
-       }
+       if (qp->attrs.state > SIW_QP_STATE_RTR)
+               goto error_unlock;
        siw_dbg_cep(cep, "[QP %d]\n", params->qpn);
 
        if (try_gso && cep->mpa.hdr.params.bits & MPA_RR_FLAG_GSO_EXP) {
@@ -1605,9 +1598,7 @@ int siw_accept(struct iw_cm_id *id, struct iw_cm_conn_param *params)
                        "[QP %u]: ord %d (max %d), ird %d (max %d)\n",
                        qp_id(qp), params->ord, sdev->attrs.max_ord,
                        params->ird, sdev->attrs.max_ird);
-               rv = -EINVAL;
-               up_write(&qp->state_lock);
-               goto error;
+               goto error_unlock;
        }
        if (cep->enhanced_rdma_conn_est)
                max_priv_data -= sizeof(struct mpa_v2_data);
@@ -1617,9 +1608,7 @@ int siw_accept(struct iw_cm_id *id, struct iw_cm_conn_param *params)
                        cep,
                        "[QP %u]: private data length: %d (max %d)\n",
                        qp_id(qp), params->private_data_len, max_priv_data);
-               rv = -EINVAL;
-               up_write(&qp->state_lock);
-               goto error;
+               goto error_unlock;
        }
        if (cep->enhanced_rdma_conn_est) {
                if (params->ord > cep->ord) {
@@ -1628,9 +1617,7 @@ int siw_accept(struct iw_cm_id *id, struct iw_cm_conn_param *params)
                        } else {
                                cep->ird = params->ird;
                                cep->ord = params->ord;
-                               rv = -EINVAL;
-                               up_write(&qp->state_lock);
-                               goto error;
+                               goto error_unlock;
                        }
                }
                if (params->ird < cep->ird) {
@@ -1639,8 +1626,7 @@ int siw_accept(struct iw_cm_id *id, struct iw_cm_conn_param *params)
                                params->ird = cep->ird;
                        else {
                                rv = -ENOMEM;
-                               up_write(&qp->state_lock);
-                               goto error;
+                               goto error_unlock;
                        }
                }
                if (cep->mpa.v2_ctrl.ord &
@@ -1687,7 +1673,6 @@ int siw_accept(struct iw_cm_id *id, struct iw_cm_conn_param *params)
                                   SIW_QP_ATTR_ORD | SIW_QP_ATTR_IRD |
                                   SIW_QP_ATTR_MPA);
        up_write(&qp->state_lock);
-
        if (rv)
                goto error;
 
@@ -1710,6 +1695,9 @@ int siw_accept(struct iw_cm_id *id, struct iw_cm_conn_param *params)
        siw_cep_set_free(cep);
 
        return 0;
+
+error_unlock:
+       up_write(&qp->state_lock);
 error:
        siw_socket_disassoc(cep->sock);
        sock_release(cep->sock);
@@ -1724,9 +1712,8 @@ error:
        }
        cep->qp = NULL;
        siw_qp_put(qp);
-
+free_cep:
        siw_cep_set_free_and_put(cep);
-
        return rv;
 }