Whamcloud - gitweb
LU-4423 lnet: free a struct kib_conn outside of the kiblnd_destroy_conn() 73/31273/3
authorDmitry Eremin <dmitry.eremin@intel.com>
Mon, 12 Feb 2018 12:37:18 +0000 (15:37 +0300)
committerOleg Drokin <oleg.drokin@intel.com>
Tue, 27 Feb 2018 03:48:28 +0000 (03:48 +0000)
To avoid confusion this fix moved the freeing a struct kib_conn outside of
the function kiblnd_destroy_conn().

Change-Id: Iae28802f5d319570064a504feb14dffd13a22b84
Signed-off-by: Dmitry Eremin <dmitry.eremin@intel.com>
Reviewed-on: https://review.whamcloud.com/31273
Reviewed-by: James Simmons <uja.ornl@yahoo.com>
Reviewed-by: Sonia Sharma <sonia.sharma@intel.com>
Reviewed-by: Doug Oucharek <dougso@me.com>
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lnet/klnds/o2iblnd/o2iblnd.c
lnet/klnds/o2iblnd/o2iblnd.h
lnet/klnds/o2iblnd/o2iblnd_cb.c

index 66b8b61..d1ea6a2 100644 (file)
@@ -982,7 +982,8 @@ kiblnd_create_conn(kib_peer_ni_t *peer_ni, struct rdma_cm_id *cmid,
         return conn;
 
  failed_2:
         return conn;
 
  failed_2:
-       kiblnd_destroy_conn(conn, true);
+       kiblnd_destroy_conn(conn);
+       LIBCFS_FREE(conn, sizeof(*conn));
  failed_1:
         LIBCFS_FREE(init_qp_attr, sizeof(*init_qp_attr));
  failed_0:
  failed_1:
         LIBCFS_FREE(init_qp_attr, sizeof(*init_qp_attr));
  failed_0:
@@ -990,7 +991,7 @@ kiblnd_create_conn(kib_peer_ni_t *peer_ni, struct rdma_cm_id *cmid,
 }
 
 void
 }
 
 void
-kiblnd_destroy_conn(kib_conn_t *conn, bool free_conn)
+kiblnd_destroy_conn(kib_conn_t *conn)
 {
        struct rdma_cm_id *cmid = conn->ibc_cmid;
        kib_peer_ni_t        *peer_ni = conn->ibc_peer;
 {
        struct rdma_cm_id *cmid = conn->ibc_cmid;
        kib_peer_ni_t        *peer_ni = conn->ibc_peer;
@@ -1052,9 +1053,6 @@ kiblnd_destroy_conn(kib_conn_t *conn, bool free_conn)
                rdma_destroy_id(cmid);
                atomic_dec(&net->ibn_nconns);
        }
                rdma_destroy_id(cmid);
                atomic_dec(&net->ibn_nconns);
        }
-
-       if (free_conn)
-               LIBCFS_FREE(conn, sizeof(*conn));
 }
 
 int
 }
 
 int
index 811b102..7a465aa 100644 (file)
@@ -1180,7 +1180,7 @@ int  kiblnd_close_peer_conns_locked (kib_peer_ni_t *peer_ni, int why);
 
 kib_conn_t *kiblnd_create_conn(kib_peer_ni_t *peer_ni, struct rdma_cm_id *cmid,
                               int state, int version);
 
 kib_conn_t *kiblnd_create_conn(kib_peer_ni_t *peer_ni, struct rdma_cm_id *cmid,
                               int state, int version);
-void kiblnd_destroy_conn(kib_conn_t *conn, bool free_conn);
+void kiblnd_destroy_conn(kib_conn_t *conn);
 void kiblnd_close_conn (kib_conn_t *conn, int error);
 void kiblnd_close_conn_locked (kib_conn_t *conn, int error);
 
 void kiblnd_close_conn (kib_conn_t *conn, int error);
 void kiblnd_close_conn_locked (kib_conn_t *conn, int error);
 
index 6ef13fb..f1ed1d9 100644 (file)
@@ -3392,11 +3392,13 @@ kiblnd_connd (void *arg)
                        spin_unlock_irqrestore(lock, flags);
                        dropped_lock = 1;
 
                        spin_unlock_irqrestore(lock, flags);
                        dropped_lock = 1;
 
-                       kiblnd_destroy_conn(conn, !peer_ni);
+                       kiblnd_destroy_conn(conn);
 
                        spin_lock_irqsave(lock, flags);
 
                        spin_lock_irqsave(lock, flags);
-                       if (!peer_ni)
+                       if (!peer_ni) {
+                               LIBCFS_FREE(conn, sizeof(*conn));
                                continue;
                                continue;
+                       }
 
                        conn->ibc_peer = peer_ni;
                        if (peer_ni->ibp_reconnected < KIB_RECONN_HIGH_RACE)
 
                        conn->ibc_peer = peer_ni;
                        if (peer_ni->ibp_reconnected < KIB_RECONN_HIGH_RACE)