Whamcloud - gitweb
LU-10520 mkfs: enable extents for big MDT 37/31037/13
authorYang Sheng <yang.sheng@intel.com>
Fri, 26 Jan 2018 13:35:33 +0000 (21:35 +0800)
committerOleg Drokin <oleg.drokin@intel.com>
Thu, 8 Mar 2018 17:35:41 +0000 (17:35 +0000)
Enable extents while MDT size is big than 16T.

Test-Parameters: trivial testlist=conf-sanity
Signed-off-by: Yang Sheng <yang.sheng@intel.com>
Change-Id: Iccd39c48e715a3f084cb5ee803be0541563f5d10
Reviewed-on: https://review.whamcloud.com/31037
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: Mike Pershin <mike.pershin@intel.com>
lustre/tests/conf-sanity.sh
lustre/utils/libmount_utils_ldiskfs.c
lustre/utils/mount_utils.h

index 7bb19a2..cb2daaf 100644 (file)
@@ -8046,6 +8046,44 @@ test_115() {
 }
 run_test 115 "Access large xattr with inodes number over 2TB"
 
 }
 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
 if ! combined_mgs_mds ; then
        stop mgs
 fi
index 362ebea..71bfe42 100644 (file)
@@ -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)
 {
 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);
        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, 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);
        } 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);
 
        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.
                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));
                                sprintf(buf, " -i %ld", bytes_per_inode);
                                strscat(mop->mo_mkfsopts, buf,
                                        sizeof(mop->mo_mkfsopts));
+                               mop->mo_inode_size = bytes_per_inode;
                        }
                }
 
                        }
                }
 
index 1e02d64..12b44b3 100644 (file)
@@ -121,6 +121,7 @@ struct mkfs_opts {
        int     mo_stripe_count;
        int     mo_flags;
        int     mo_mgs_failnodes;
        int     mo_stripe_count;
        int     mo_flags;
        int     mo_mgs_failnodes;
+       int     mo_inode_size;
 };
 #endif
 
 };
 #endif