From: Andriy Skulysh Date: Mon, 3 Dec 2018 14:45:18 +0000 (+0200) Subject: LU-11757 lod: use calculated stripe count X-Git-Tag: 2.12.51~67 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=622a94d5e27ed3e596918863c08b304a6be9a646 LU-11757 lod: use calculated stripe count lod_prep_md_striped_create() tries to allocat big chunk of memory because lum->lum_stripe_count == -1 and is converted to __u32. ldo_dir_stripe_count was calculated already in lod_ah_init() Change-Id: Id99d9e024638dfb1b34262840d2e543c808a9cdc Cray-bug-id: LUS-6694 Signed-off-by: Andriy Skulysh Reviewed-by: Alexander Boyko Tested-by: Elena Gryaznova Reviewed-by: Vladimir Saveliev Reviewed-on: https://review.whamcloud.com/33829 Tested-by: Jenkins Reviewed-by: Andreas Dilger Tested-by: Maloo Reviewed-by: Lai Siyao Reviewed-by: Oleg Drokin --- diff --git a/lustre/lod/lod_object.c b/lustre/lod/lod_object.c index c9571a2..d7fdad2 100644 --- a/lustre/lod/lod_object.c +++ b/lustre/lod/lod_object.c @@ -1892,9 +1892,8 @@ static int lod_prep_md_striped_create(const struct lu_env *env, /* The lum has been verifed in lod_verify_md_striping */ LASSERT(le32_to_cpu(lum->lum_magic) == LMV_USER_MAGIC || le32_to_cpu(lum->lum_magic) == LMV_USER_MAGIC_SPECIFIC); - LASSERT(le32_to_cpu(lum->lum_stripe_count) > 0); - stripe_count = le32_to_cpu(lum->lum_stripe_count); + stripe_count = lo->ldo_dir_stripe_count; OBD_ALLOC(idx_array, sizeof(idx_array[0]) * stripe_count); if (idx_array == NULL) diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh index f785522..341f357 100755 --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -18316,6 +18316,31 @@ test_300q() { } run_test 300q "create remote directory under orphan directory" +test_300r() { + [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.55) ] && + skip "Need MDS version at least 2.7.55" && return + [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + + mkdir $DIR/$tdir + + $LFS setdirstripe -i 0 -c -1 $DIR/$tdir/striped_dir || + error "set striped dir error" + + $LFS getdirstripe $DIR/$tdir/striped_dir || + error "getstripeddir fails" + + local stripe_count + stripe_count=$($LFS getdirstripe $DIR/$tdir/striped_dir | + awk '/lmv_stripe_count:/ { print $2 }') + + [ $MDSCOUNT -ne $stripe_count ] && + error "wrong stripe count $stripe_count expected $MDSCOUNT" + + rm -rf $DIR/$tdir/striped_dir || + error "unlink striped dir fails" +} +run_test 300r "test -1 striped directory" + prepare_remote_file() { mkdir $DIR/$tdir/src_dir || error "create remote source failed"