RDMA/siw: Introduce siw_cep_set_free_and_put
authorGuoqing Jiang <guoqing.jiang@linux.dev>
Mon, 13 Nov 2023 11:57:19 +0000 (19:57 +0800)
committerLeon Romanovsky <leon@kernel.org>
Wed, 15 Nov 2023 13:58:14 +0000 (15:58 +0200)
Add the helper which can be used in some places.

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-11-guoqing.jiang@linux.dev
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/sw/siw/siw_cm.c

index 5e6e571536111c90c11a14f3eb3105a1c7572bba..d72c9fab01d92ae844495f45369b6be11cfad64d 100644 (file)
@@ -444,6 +444,12 @@ void siw_cep_put(struct siw_cep *cep)
        kref_put(&cep->ref, __siw_cep_dealloc);
 }
 
+static void siw_cep_set_free_and_put(struct siw_cep *cep)
+{
+       siw_cep_set_free(cep);
+       siw_cep_put(cep);
+}
+
 void siw_cep_get(struct siw_cep *cep)
 {
        kref_get(&cep->ref);
@@ -1514,9 +1520,7 @@ error:
 
                cep->state = SIW_EPSTATE_CLOSED;
 
-               siw_cep_set_free(cep);
-
-               siw_cep_put(cep);
+               siw_cep_set_free_and_put(cep);
 
        } else if (s) {
                sock_release(s);
@@ -1564,16 +1568,14 @@ 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(cep);
-               siw_cep_put(cep);
+               siw_cep_set_free_and_put(cep);
 
                return -ECONNRESET;
        }
        qp = siw_qp_id2obj(sdev, params->qpn);
        if (!qp) {
                WARN(1, "[QP %d] does not exist\n", params->qpn);
-               siw_cep_set_free(cep);
-               siw_cep_put(cep);
+               siw_cep_set_free_and_put(cep);
 
                return -EINVAL;
        }
@@ -1719,8 +1721,7 @@ error:
        cep->qp = NULL;
        siw_qp_put(qp);
 
-       siw_cep_set_free(cep);
-       siw_cep_put(cep);
+       siw_cep_set_free_and_put(cep);
 
        return rv;
 }
@@ -1743,8 +1744,7 @@ int siw_reject(struct iw_cm_id *id, const void *pdata, u8 pd_len)
        if (cep->state != SIW_EPSTATE_RECVD_MPAREQ) {
                siw_dbg_cep(cep, "out of state\n");
 
-               siw_cep_set_free(cep);
-               siw_cep_put(cep); /* put last reference */
+               siw_cep_set_free_and_put(cep); /* put last reference */
 
                return -ECONNRESET;
        }
@@ -1761,8 +1761,7 @@ int siw_reject(struct iw_cm_id *id, const void *pdata, u8 pd_len)
 
        cep->state = SIW_EPSTATE_CLOSED;
 
-       siw_cep_set_free(cep);
-       siw_cep_put(cep);
+       siw_cep_set_free_and_put(cep);
 
        return 0;
 }
@@ -1897,8 +1896,7 @@ error:
                siw_socket_disassoc(s);
                cep->state = SIW_EPSTATE_CLOSED;
 
-               siw_cep_set_free(cep);
-               siw_cep_put(cep);
+               siw_cep_set_free_and_put(cep);
        }
        sock_release(s);
 
@@ -1932,8 +1930,7 @@ static void siw_drop_listeners(struct iw_cm_id *id)
                        cep->sock = NULL;
                }
                cep->state = SIW_EPSTATE_CLOSED;
-               siw_cep_set_free(cep);
-               siw_cep_put(cep);
+               siw_cep_set_free_and_put(cep);
        }
 }