From f068abeca91d41b60aaef990476f6fbd8b405f4f Mon Sep 17 00:00:00 2001 From: johann Date: Mon, 6 Oct 2008 12:28:53 +0000 Subject: [PATCH] Branch HEAD b=17261 i=adilger i=shadow cap lmm_size to LOV_MAX_STRIPE_COUNT. --- lustre/lov/lov_pack.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/lustre/lov/lov_pack.c b/lustre/lov/lov_pack.c index b02c980..904817e 100644 --- a/lustre/lov/lov_pack.c +++ b/lustre/lov/lov_pack.c @@ -161,7 +161,7 @@ int lov_packmd(struct obd_export *exp, struct lov_mds_md **lmmp, struct lov_obd *lov = &obd->u.lov; struct lov_mds_md_v1 *lmmv1; struct lov_mds_md_v3 *lmmv3; - int stripe_count = lov->desc.ld_tgt_count; + int stripe_count; struct lov_ost_data_v1 *lmm_objects; int lmm_size, lmm_magic; int i; @@ -179,11 +179,19 @@ int lov_packmd(struct obd_export *exp, struct lov_mds_md **lmmp, } else { stripe_count = lsm->lsm_stripe_count; } - } else if (lmmp && *lmmp) { - lmm_magic = le32_to_cpu((*lmmp)->lmm_magic); } else { - /* lsm == NULL and lmmp == NULL */ - lmm_magic = LOV_MAGIC; + /* No needs to allocated more than LOV_MAX_STRIPE_COUNT. + * Anyway, this is pretty inaccurate since ld_tgt_count now + * represents max index and we should rely on the actual number + * of OSTs instead */ + stripe_count = min(LOV_MAX_STRIPE_COUNT, + lov->desc.ld_tgt_count); + + if (lmmp && *lmmp) + lmm_magic = le32_to_cpu((*lmmp)->lmm_magic); + else + /* lsm == NULL and lmmp == NULL */ + lmm_magic = LOV_MAGIC; } if ((lmm_magic != LOV_MAGIC_V1) && -- 1.8.3.1