}
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
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);
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);
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.
sprintf(buf, " -i %ld", bytes_per_inode);
strscat(mop->mo_mkfsopts, buf,
sizeof(mop->mo_mkfsopts));
+ mop->mo_inode_size = bytes_per_inode;
}
}