Whamcloud - gitweb
LU-10070 lod: layout_del memleak 70/35270/4
authorVitaly Fertman <c17818@cray.com>
Wed, 19 Jun 2019 21:28:40 +0000 (00:28 +0300)
committerOleg Drokin <green@whamcloud.com>
Thu, 27 Jun 2019 21:34:33 +0000 (21:34 +0000)
A component may have been declared on a pool or on a specific set
of OSTs, however only the first component is INIT'ed at the beginning.
lod_layout_del should take care about these allocations independently
of the existent striping

Cray-bug-id: LUS-2528
Signed-off-by: Vitaly Fertman <c17818@cray.com>
Change-Id: I7069154ec6b3e64cd945231829c19c4c6920c030
Reviewed-on: https://review.whamcloud.com/35270
Reviewed-by: Patrick Farrell <pfarrell@whamcloud.com>
Tested-by: Jenkins
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/lod/lod_object.c

index 789a4a1..2b6f557 100644 (file)
@@ -4149,6 +4149,14 @@ static int lod_layout_del(const struct lu_env *env, struct dt_object *dt,
                        break;
                left--;
 
+               lod_obj_set_pool(lo, i, NULL);
+               if (lod_comp->llc_ostlist.op_array) {
+                       OBD_FREE(lod_comp->llc_ostlist.op_array,
+                                lod_comp->llc_ostlist.op_size);
+                       lod_comp->llc_ostlist.op_array = NULL;
+                       lod_comp->llc_ostlist.op_size = 0;
+               }
+
                /* Not instantiated component */
                if (lod_comp->llc_stripe == NULL)
                        continue;
@@ -4173,13 +4181,6 @@ static int lod_layout_del(const struct lu_env *env, struct dt_object *dt,
                         sizeof(__u32) * lod_comp->llc_stripes_allocated);
                lod_comp->llc_ost_indices = NULL;
                lod_comp->llc_stripes_allocated = 0;
-               lod_obj_set_pool(lo, i, NULL);
-               if (lod_comp->llc_ostlist.op_array) {
-                       OBD_FREE(lod_comp->llc_ostlist.op_array,
-                                lod_comp->llc_ostlist.op_size);
-                       lod_comp->llc_ostlist.op_array = NULL;
-                       lod_comp->llc_ostlist.op_size = 0;
-               }
        }
 
        LASSERTF(left >= 0 && left < lo->ldo_comp_cnt, "left = %d\n", left);