From b0ce7701d1e9dd1269b99b1c660a140fe85b9592 Mon Sep 17 00:00:00 2001 From: Vitaly Fertman Date: Thu, 20 Jun 2019 00:28:40 +0300 Subject: [PATCH] LU-10070 lod: layout_del memleak 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 Change-Id: I7069154ec6b3e64cd945231829c19c4c6920c030 Reviewed-on: https://review.whamcloud.com/35270 Reviewed-by: Patrick Farrell Tested-by: Jenkins Reviewed-by: Andreas Dilger Tested-by: Maloo Reviewed-by: Oleg Drokin --- lustre/lod/lod_object.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lustre/lod/lod_object.c b/lustre/lod/lod_object.c index 789a4a1..2b6f557 100644 --- a/lustre/lod/lod_object.c +++ b/lustre/lod/lod_object.c @@ -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); -- 1.8.3.1