RDMA/siw: Introduce siw_free_cm_id
authorGuoqing Jiang <guoqing.jiang@linux.dev>
Mon, 13 Nov 2023 11:57:20 +0000 (19:57 +0800)
committerLeon Romanovsky <leon@kernel.org>
Wed, 15 Nov 2023 13:58:14 +0000 (15:58 +0200)
Factor out a helper to simplify code.

Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202310091656.JlrmcNXB-lkp@intel.com/
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-12-guoqing.jiang@linux.dev
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/sw/siw/siw_cm.c

index d72c9fab01d92ae844495f45369b6be11cfad64d..36fd459b136ce4607a669b3af2fe7fa6857d14a8 100644 (file)
@@ -364,6 +364,15 @@ static int siw_cm_upcall(struct siw_cep *cep, enum iw_cm_event_type reason,
        return id->event_handler(id, &event);
 }
 
+static void siw_free_cm_id(struct siw_cep *cep)
+{
+       if (!cep->cm_id)
+               return;
+
+       cep->cm_id->rem_ref(cep->cm_id);
+       cep->cm_id = NULL;
+}
+
 /*
  * siw_qp_cm_drop()
  *
@@ -415,8 +424,7 @@ void siw_qp_cm_drop(struct siw_qp *qp, int schedule)
                        default:
                                break;
                        }
-                       cep->cm_id->rem_ref(cep->cm_id);
-                       cep->cm_id = NULL;
+                       siw_free_cm_id(cep);
                        siw_cep_put(cep);
                }
                cep->state = SIW_EPSTATE_CLOSED;
@@ -1180,8 +1188,7 @@ static void siw_cm_work_handler(struct work_struct *w)
                        cep->sock = NULL;
                }
                if (cep->cm_id) {
-                       cep->cm_id->rem_ref(cep->cm_id);
-                       cep->cm_id = NULL;
+                       siw_free_cm_id(cep);
                        siw_cep_put(cep);
                }
        }
@@ -1710,10 +1717,7 @@ error:
 
        cep->state = SIW_EPSTATE_CLOSED;
 
-       if (cep->cm_id) {
-               cep->cm_id->rem_ref(id);
-               cep->cm_id = NULL;
-       }
+       siw_free_cm_id(cep);
        if (qp->cep) {
                siw_cep_put(cep);
                qp->cep = NULL;
@@ -1888,10 +1892,7 @@ error:
        if (cep) {
                siw_cep_set_inuse(cep);
 
-               if (cep->cm_id) {
-                       cep->cm_id->rem_ref(cep->cm_id);
-                       cep->cm_id = NULL;
-               }
+               siw_free_cm_id(cep);
                cep->sock = NULL;
                siw_socket_disassoc(s);
                cep->state = SIW_EPSTATE_CLOSED;
@@ -1920,10 +1921,7 @@ static void siw_drop_listeners(struct iw_cm_id *id)
 
                siw_cep_set_inuse(cep);
 
-               if (cep->cm_id) {
-                       cep->cm_id->rem_ref(cep->cm_id);
-                       cep->cm_id = NULL;
-               }
+               siw_free_cm_id(cep);
                if (cep->sock) {
                        siw_socket_disassoc(cep->sock);
                        sock_release(cep->sock);