From 4acea881a59e616751b65b78b92508e1a8b3abf3 Mon Sep 17 00:00:00 2001 From: "John L. Hammond" Date: Wed, 6 Apr 2022 11:51:47 -0500 Subject: [PATCH] LU-15308 lod: set ldo_mirrors to NULL on error In lod_alloc_comp_entries() if OBD_ALLOC_LARGE fails and we free ldo_mirrors then we set it to NULL to avoid a double free later. Lustre-change: https://review.whamcloud.com/47008 Lustre-commit: 26f6b0e952b24de2a900f6f1eeae79fea6af4787 Test-Parameters: trivial Signed-off-by: John L. Hammond Change-Id: I27552d1eaecc06720190db9cfe89ded71b9fef53 Reviewed-by: Andreas Dilger Reviewed-by: Alex Zhuravlev Reviewed-on: https://review.whamcloud.com/47850 Tested-by: jenkins Tested-by: Maloo --- lustre/lod/lod_lov.c | 1 + lustre/lod/lod_qos.c | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lustre/lod/lod_lov.c b/lustre/lod/lod_lov.c index 4f295bd..6d4b08d 100644 --- a/lustre/lod/lod_lov.c +++ b/lustre/lod/lod_lov.c @@ -583,6 +583,7 @@ int lod_alloc_comp_entries(struct lod_object *lo, sizeof(*lo->ldo_comp_entries) * comp_count); if (lo->ldo_comp_entries == NULL) { OBD_FREE_PTR_ARRAY(lo->ldo_mirrors, mirror_count); + lo->ldo_mirrors = NULL; lo->ldo_mirror_count = 0; return -ENOMEM; } diff --git a/lustre/lod/lod_qos.c b/lustre/lod/lod_qos.c index 6391761..4165de5 100644 --- a/lustre/lod/lod_qos.c +++ b/lustre/lod/lod_qos.c @@ -2608,7 +2608,9 @@ int lod_qos_prep_create(const struct lu_env *env, struct lod_object *lo, ENTRY; LASSERT(lo); - LASSERT(lo->ldo_comp_cnt > comp_idx && lo->ldo_comp_entries != NULL); + LASSERTF(lo->ldo_comp_cnt > comp_idx, "ldo_comp_cnt %u, comp_idx %u\n", + lo->ldo_comp_cnt, comp_idx); + LASSERT(lo->ldo_comp_entries != NULL); lod_comp = &lo->ldo_comp_entries[comp_idx]; LASSERT(!(lod_comp->llc_flags & LCME_FL_EXTENSION)); -- 1.8.3.1