From: Yang Sheng Date: Fri, 26 Jan 2018 13:35:33 +0000 (+0800) Subject: LU-10520 mkfs: enable extents for big MDT X-Git-Tag: 2.10.59~17 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=eb65c3a586f1efd425f8360972b5d365cfecf7e1 LU-10520 mkfs: enable extents for big MDT Enable extents while MDT size is big than 16T. Test-Parameters: trivial testlist=conf-sanity Signed-off-by: Yang Sheng Change-Id: Iccd39c48e715a3f084cb5ee803be0541563f5d10 Reviewed-on: https://review.whamcloud.com/31037 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Mike Pershin --- diff --git a/lustre/tests/conf-sanity.sh b/lustre/tests/conf-sanity.sh index 7bb19a2..cb2daaf 100644 --- a/lustre/tests/conf-sanity.sh +++ b/lustre/tests/conf-sanity.sh @@ -8046,6 +8046,44 @@ test_115() { } run_test 115 "Access large xattr with inodes number over 2TB" +test_116() { + [ $(facet_fstype $SINGLEMDS) != "ldiskfs" ] && + skip "ldiskfs only test" && return + + stopall + load_modules + + local tmpmnt=/mnt/$tdir + local mdtimg=$tfile-mdt0 + + do_facet $SINGLEMDS mkdir -p $tmpmnt + stack_trap "do_facet $SINGLEMDS rmdir $tmpmnt" EXIT + + do_facet $SINGLEMDS touch $TMP/$mdtimg + stack_trap "do_facet $SINGLEMDS rm -f $TMP/$mdtimg" EXIT + do_facet $SINGLEMDS mkfs -t xfs -d file,size=1t,name=$TMP/$mdtimg || + error "mkfs temporary xfs image" + + do_facet $SINGLEMDS mount $TMP/$mdtimg $tmpmnt || + error "mount temporary xfs image" + stack_trap "do_facet $SINGLEMDS umount $tmpmnt" EXIT + local old_mdssize=$MDSSIZE + local old_mdsisize=$MDSISIZE + + MDSSIZE=$((17 * 1024 * 1024 * 1024)) # 17T MDT + MDSISIZE=$((16 << 20)) + local opts17t="$(mkfs_opts $SINGLEMDS)" + + MDSSIZE=$old_mdssize + MDSISIZE=$old_mdsisize + do_facet $SINGLEMDS $MKFS $opts17t $tmpmnt/$mdtimg || + error "failed to mkfs for $tmpmnt/$mdtimg" + + do_facet $SINGLEMDS $TUNE2FS -l $tmpmnt/$mdtimg | + grep -qw 'features.*extent' || error "extent should be enabled" +} +run_test 116 "big size MDT support" + if ! combined_mgs_mds ; then stop mgs fi diff --git a/lustre/utils/libmount_utils_ldiskfs.c b/lustre/utils/libmount_utils_ldiskfs.c index 362ebea..71bfe42 100644 --- a/lustre/utils/libmount_utils_ldiskfs.c +++ b/lustre/utils/libmount_utils_ldiskfs.c @@ -542,6 +542,13 @@ static void append_unique(char *buf, char *prefix, char *key, char *val, static int enable_default_ext4_features(struct mkfs_opts *mop, char *anchor, size_t maxbuflen, int user_spec) { + int enable_64bit = 0; + + /* Enable large block addresses if the LUN is over 2^32 blocks. */ + if ((mop->mo_device_kb / (L_BLOCK_SIZE >> 10) > UINT32_MAX) && + is_e2fsprogs_feature_supp("-O 64bit") == 0) + enable_64bit = 1; + if (IS_OST(&mop->mo_ldd)) { append_unique(anchor, user_spec ? "," : " -O ", "extents", NULL, maxbuflen); @@ -550,7 +557,10 @@ static int enable_default_ext4_features(struct mkfs_opts *mop, char *anchor, append_unique(anchor, user_spec ? "," : " -O ", "dirdata", NULL, maxbuflen); append_unique(anchor, ",", "uninit_bg", NULL, maxbuflen); - append_unique(anchor, ",", "^extents", NULL, maxbuflen); + if (enable_64bit) + append_unique(anchor, ",", "extents", NULL, maxbuflen); + else + append_unique(anchor, ",", "^extents", NULL, maxbuflen); } else { append_unique(anchor, user_spec ? "," : " -O ", "uninit_bg", NULL, maxbuflen); @@ -587,9 +597,7 @@ static int enable_default_ext4_features(struct mkfs_opts *mop, char *anchor, if (is_e2fsprogs_feature_supp("-O huge_file") == 0) append_unique(anchor, ",", "huge_file", NULL, maxbuflen); - /* Enable large block addresses if the LUN is over 2^32 blocks. */ - if (mop->mo_device_kb / (L_BLOCK_SIZE >> 10) >= 0x100002000ULL && - is_e2fsprogs_feature_supp("-O 64bit") == 0) + if (enable_64bit) append_unique(anchor, ",", "64bit", NULL, maxbuflen); /* Cluster inode/block bitmaps and inode table for more efficient IO. @@ -816,6 +824,7 @@ int ldiskfs_make_lustre(struct mkfs_opts *mop) sprintf(buf, " -i %ld", bytes_per_inode); strscat(mop->mo_mkfsopts, buf, sizeof(mop->mo_mkfsopts)); + mop->mo_inode_size = bytes_per_inode; } } diff --git a/lustre/utils/mount_utils.h b/lustre/utils/mount_utils.h index 1e02d64..12b44b3 100644 --- a/lustre/utils/mount_utils.h +++ b/lustre/utils/mount_utils.h @@ -121,6 +121,7 @@ struct mkfs_opts { int mo_stripe_count; int mo_flags; int mo_mgs_failnodes; + int mo_inode_size; }; #endif