common: rework _require_ext4_mkfs_feature

In all of the places where we need check to see if mkfs.ext4 can
support a set of file system features, we also should be checking to
see if the kernel can support those file system features.  So rename
_require_ext4_mkfs_feature to _require_scratch_ext4_feature, and
actually format the file system in $SCRATCH_DEV.

Also allow ext4/306 to run on systems where mke2fs doesn't support
the "64bit" option.

Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
This commit is contained in:
Theodore Ts'o
2017-12-11 17:49:19 -05:00
committed by Eryu Guan
parent d79448aefe
commit be341e36fd
5 changed files with 21 additions and 31 deletions
+13 -25
View File
@@ -1812,32 +1812,20 @@ _require_scratch_ext4_crc()
_scratch_unmount _scratch_unmount
} }
# Check the specified feature whether it is available in mkfs.ext4 or not. # Check whether the specified feature whether it is supported by
_require_ext4_mkfs_feature() # mkfs.ext4 and the kernel.
_require_scratch_ext4_feature()
{ {
local feature=$1 if [ -z "$1" ]; then
local testfile=/tmp/$$.ext4_mkfs echo "Usage: _require_scratch_ext4_feature feature"
exit 1
if [ -z "$feature" ]; then fi
echo "Usage: _require_ext4_mkfs_feature feature" $MKFS_EXT4_PROG -F $MKFS_OPTIONS -O "$1" \
exit 1 $SCRATCH_DEV 512m >/dev/null 2>&1 \
fi || _notrun "mkfs.ext4 doesn't support $1 feature"
_scratch_mount >/dev/null 2>&1 \
touch $testfile || _notrun "Kernel doesn't support the ext4 feature(s): $1"
local result=$($MKFS_EXT4_PROG -F -O $feature -n $testfile 512m 2>&1) _scratch_unmount
rm -f $testfile
echo $result | grep -q "Invalid filesystem option" && \
_notrun "mkfs.ext4 doesn't support $feature feature"
}
# this test requires the ext4 kernel support bigalloc feature
#
_require_ext4_bigalloc()
{
$MKFS_EXT4_PROG -F -O bigalloc $SCRATCH_DEV 512m >/dev/null 2>&1
_scratch_mount >/dev/null 2>&1 \
|| _notrun "Ext4 kernel doesn't support bigalloc feature"
_scratch_unmount
} }
# this test requires that external log/realtime devices are not in use # this test requires that external log/realtime devices are not in use
+1 -2
View File
@@ -38,8 +38,7 @@ _supported_fs ext4
_supported_os Linux _supported_os Linux
_require_scratch _require_scratch
_require_ext4_mkfs_feature "bigalloc" _require_scratch_ext4_feature "bigalloc"
_require_ext4_bigalloc
rm -f $seqres.full rm -f $seqres.full
+1 -1
View File
@@ -48,7 +48,7 @@ _supported_fs ext4
_supported_os Linux _supported_os Linux
_require_scratch_nocheck _require_scratch_nocheck
_require_command "$DEBUGFS_PROG" debugfs _require_command "$DEBUGFS_PROG" debugfs
_require_ext4_mkfs_feature "bigalloc,meta_bg,^resize_inode" _require_scratch_ext4_feature "bigalloc,meta_bg,^resize_inode"
echo "Create ext4 fs and modify first_meta_bg's value" echo "Create ext4 fs and modify first_meta_bg's value"
_scratch_mkfs "-O bigalloc,meta_bg,^resize_inode" >> $seqres.full 2>&1 _scratch_mkfs "-O bigalloc,meta_bg,^resize_inode" >> $seqres.full 2>&1
+1 -1
View File
@@ -50,7 +50,7 @@ _supported_fs ext4
_supported_os Linux _supported_os Linux
_require_scratch _require_scratch
_require_attrs _require_attrs
_require_ext4_mkfs_feature ea_inode _require_scratch_ext4_feature "ea_inode"
_scratch_mkfs_ext4 -O ea_inode >/dev/null 2>&1 _scratch_mkfs_ext4 -O ea_inode >/dev/null 2>&1
_scratch_mount _scratch_mount
+5 -2
View File
@@ -44,12 +44,15 @@ _supported_fs ext4
_supported_os Linux _supported_os Linux
_require_scratch _require_scratch
_require_ext4_mkfs_feature "64bit"
rm -f $seqres.full rm -f $seqres.full
# Make a small ext4 fs with extents disabled & mount it # Make a small ext4 fs with extents disabled & mount it
$MKFS_EXT4_PROG -F -O ^extents,^64bit $SCRATCH_DEV 512m >> $seqres.full 2>&1 features="^extents"
if grep -q 64bit /etc/mke2fs.conf ; then
features="^extents,^64bit"
fi
$MKFS_EXT4_PROG -F -O "$features" $SCRATCH_DEV 512m >> $seqres.full 2>&1
_scratch_mount || _fail "couldn't mount fs" _scratch_mount || _fail "couldn't mount fs"
# Create a small non-extent-based file # Create a small non-extent-based file