Whamcloud - gitweb
LU-11757 lod: use calculated stripe count 29/33829/3
authorAndriy Skulysh <c17819@cray.com>
Mon, 3 Dec 2018 14:45:18 +0000 (16:45 +0200)
committerOleg Drokin <green@whamcloud.com>
Fri, 4 Jan 2019 04:49:10 +0000 (04:49 +0000)
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 <c17819@cray.com>
Reviewed-by: Alexander Boyko <c17825@cray.com>
Tested-by: Elena Gryaznova <c17455@cray.com>
Reviewed-by: Vladimir Saveliev <c17830@cray.com>
Reviewed-on: https://review.whamcloud.com/33829
Tested-by: Jenkins
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Lai Siyao <lai.siyao@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/lod/lod_object.c
lustre/tests/sanity.sh

index c9571a2..d7fdad2 100644 (file)
@@ -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)
index f785522..341f357 100755 (executable)
@@ -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"