common: rework _require_ext4_mkfs_feature
authorTheodore Ts'o <tytso@mit.edu>
Mon, 11 Dec 2017 22:49:19 +0000 (17:49 -0500)
committerEryu Guan <eguan@redhat.com>
Tue, 12 Dec 2017 04:07:48 +0000 (12:07 +0800)
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>
common/rc
tests/ext4/003
tests/ext4/025
tests/ext4/026
tests/ext4/306

index 4c053a53711acf08d393ce469a7342ad12f3ccd6..cbd37e795c7f6a665ccb2915f181e6a109919b1a 100644 (file)
--- a/common/rc
+++ b/common/rc
@@ -1812,32 +1812,20 @@ _require_scratch_ext4_crc()
        _scratch_unmount
 }
 
-# Check the specified feature whether it is available in mkfs.ext4 or not.
-_require_ext4_mkfs_feature()
+# Check whether the specified feature whether it is supported by
+# mkfs.ext4 and the kernel.
+_require_scratch_ext4_feature()
 {
-       local feature=$1
-       local testfile=/tmp/$$.ext4_mkfs
-
-       if [ -z "$feature" ]; then
-                echo "Usage: _require_ext4_mkfs_feature feature"
-                exit 1
-        fi
-
-       touch $testfile
-       local result=$($MKFS_EXT4_PROG -F -O $feature -n $testfile 512m 2>&1)
-       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
+    if [ -z "$1" ]; then
+        echo "Usage: _require_scratch_ext4_feature feature"
+        exit 1
+    fi
+    $MKFS_EXT4_PROG -F $MKFS_OPTIONS -O "$1" \
+                   $SCRATCH_DEV 512m >/dev/null 2>&1 \
+       || _notrun "mkfs.ext4 doesn't support $1 feature"
+    _scratch_mount >/dev/null 2>&1 \
+       || _notrun "Kernel doesn't support the ext4 feature(s): $1"
+    _scratch_unmount
 }
 
 # this test requires that external log/realtime devices are not in use
index 9be401789fdc3cc56d9c1d4a97e56603636d9d4c..eafe9a53cb347a454d6272779784718fd3968a81 100755 (executable)
@@ -38,8 +38,7 @@ _supported_fs ext4
 _supported_os Linux
 
 _require_scratch
-_require_ext4_mkfs_feature "bigalloc"
-_require_ext4_bigalloc
+_require_scratch_ext4_feature "bigalloc"
 
 rm -f $seqres.full
 
index 49ecb462b539689cf3157ed35d901d9228d6d771..2a7b35fc3ee2b852637e9d1c550280b68173cea7 100755 (executable)
@@ -48,7 +48,7 @@ _supported_fs ext4
 _supported_os Linux
 _require_scratch_nocheck
 _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"
 _scratch_mkfs "-O bigalloc,meta_bg,^resize_inode" >> $seqres.full 2>&1
index 94a737ce0a5f09bf35e1e0561dbadc8c81cdefdd..7731e92396596c0db8ba8b4d5ca1b03d3108743b 100755 (executable)
@@ -50,7 +50,7 @@ _supported_fs ext4
 _supported_os Linux
 _require_scratch
 _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_mount
index be765e6a67b176528a6264ee79fbdb011fa38118..70f281dbaf39738a62365128c096451cc0dbfcc8 100755 (executable)
@@ -44,12 +44,15 @@ _supported_fs ext4
 _supported_os Linux
 
 _require_scratch
-_require_ext4_mkfs_feature "64bit"
 
 rm -f $seqres.full
 
 # 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"
 
 # Create a small non-extent-based file