generic/050: Fix test failure for filesystems without journal
authorJan Kara <jack@suse.cz>
Tue, 5 Nov 2019 13:19:21 +0000 (14:19 +0100)
committerEryu Guan <guaneryu@gmail.com>
Sun, 10 Nov 2019 13:49:00 +0000 (21:49 +0800)
Filesystems without journal can happily mount unrecovered filesystem
read-only which confuses this test. Handle this by providing
different expected output for filesystems without journal.

Signed-off-by: Jan Kara <jack@suse.cz>
Reviewed-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
.gitignore
common/rc
tests/generic/050
tests/generic/050.cfg [new file with mode: 0644]
tests/generic/050.out [deleted file]
tests/generic/050.out.default [new file with mode: 0644]
tests/generic/050.out.nojournal [new file with mode: 0644]

index 6c11a40..d83df7d 100644 (file)
 
 # Symlinked files
 /tests/generic/035.out
+/tests/generic/050.out
 /tests/xfs/033.out
 /tests/xfs/071.out
 /tests/xfs/096.out
index 3c41217..b988e91 100644 (file)
--- a/common/rc
+++ b/common/rc
@@ -3159,7 +3159,7 @@ _require_norecovery()
 # It's possible that TEST_DEV and SCRATCH_DEV have different features (it'd be
 # odd, but possible) so check $TEST_DEV by default, but we can optionall pass
 # any dev we want.
-_require_metadata_journaling()
+_has_metadata_journaling()
 {
        if [ -z $1 ]; then
                local dev=$TEST_DEV
@@ -3169,32 +3169,52 @@ _require_metadata_journaling()
 
        case "$FSTYP" in
        ext2|vfat|msdos|udf)
-               _notrun "$FSTYP does not support metadata journaling"
+               echo "$FSTYP does not support metadata journaling"
+               return 1
                ;;
        ext4)
                # ext4 could be mkfs'd without a journal...
                _require_dumpe2fs
-               $DUMPE2FS_PROG -h $dev 2>&1 | grep -q has_journal || \
-                       _notrun "$FSTYP on $dev not configured with metadata journaling"
+               $DUMPE2FS_PROG -h $dev 2>&1 | grep -q has_journal || {
+                       echo "$FSTYP on $dev not configured with metadata journaling"
+                       return 1
+               }
                # ext4 might not load a journal
-               _exclude_scratch_mount_option "noload"
+               if _normalize_mount_options | grep -qw "noload"; then
+                       echo "mount option \"noload\" not allowed in this test"
+                       return 1
+               fi
                ;;
        overlay)
                # metadata journaling check is based on base filesystem configurations
                # and  because -overlay option saves those configurations to OVL_BASE_*,
                # adding restore/override the configurations before/after the check.
                if [ ! -z $OVL_BASE_FSTYP -a $OVL_BASE_FSTYP != "overlay" ]; then
+                       local ret
+
                        _overlay_config_restore
-                       _require_metadata_journaling
+                       _has_metadata_journaling
+                       ret=$?
                        _overlay_config_override
+                       return $ret
                else
-                       _notrun "No metadata journaling support for legacy overlay setup"
+                       echo "No metadata journaling support for legacy overlay setup"
+                       return 1
                fi
                ;;
        *)
                # by default we pass; if you need to, add your fs above!
                ;;
        esac
+       return 0
+}
+
+_require_metadata_journaling()
+{
+       local msg=$(_has_metadata_journaling $@)
+       if [ -n "$msg" ]; then
+               _notrun "$msg"
+       fi
 }
 
 _count_extents()
index 91632d2..a8d648e 100755 (executable)
@@ -6,6 +6,7 @@
 #
 # Check out various mount/remount/unmount scenarious on a read-only blockdev.
 #
+seqfull=$0
 seq=`basename $0`
 seqres=$RESULT_DIR/$seq
 echo "QA output created by $seq"
@@ -34,6 +35,13 @@ _require_scratch_shutdown
 _require_local_device $SCRATCH_DEV
 _require_norecovery
 
+# Select appropriate output file
+features=""
+if ! _has_metadata_journaling $SCRATCH_DEV >/dev/null; then
+       features="nojournal"
+fi
+_link_out_file "$features"
+
 _scratch_mkfs >/dev/null 2>&1
 
 filter_ro_mount() {
diff --git a/tests/generic/050.cfg b/tests/generic/050.cfg
new file mode 100644 (file)
index 0000000..c76bd47
--- /dev/null
@@ -0,0 +1 @@
+nojournal: nojournal
diff --git a/tests/generic/050.out b/tests/generic/050.out
deleted file mode 100644 (file)
index 7d70dde..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-QA output created by 050
-setting device read-only
-mounting read-only block device:
-mount: device write-protected, mounting read-only
-touching file on read-only filesystem (should fail)
-touch: cannot touch 'SCRATCH_MNT/foo': Read-only file system
-unmounting read-only filesystem
-setting device read-write
-mounting read-write block device:
-touch files
-going down:
-unmounting shutdown filesystem:
-setting device read-only
-mounting filesystem that needs recovery on a read-only device:
-mount: device write-protected, mounting read-only
-mount: cannot mount device read-only
-unmounting read-only filesystem
-umount: SCRATCH_DEV: not mounted
-mounting filesystem with -o norecovery on a read-only device:
-mount: device write-protected, mounting read-only
-unmounting read-only filesystem
-setting device read-write
-mounting filesystem that needs recovery with -o ro:
-*** done
diff --git a/tests/generic/050.out.default b/tests/generic/050.out.default
new file mode 100644 (file)
index 0000000..7d70dde
--- /dev/null
@@ -0,0 +1,24 @@
+QA output created by 050
+setting device read-only
+mounting read-only block device:
+mount: device write-protected, mounting read-only
+touching file on read-only filesystem (should fail)
+touch: cannot touch 'SCRATCH_MNT/foo': Read-only file system
+unmounting read-only filesystem
+setting device read-write
+mounting read-write block device:
+touch files
+going down:
+unmounting shutdown filesystem:
+setting device read-only
+mounting filesystem that needs recovery on a read-only device:
+mount: device write-protected, mounting read-only
+mount: cannot mount device read-only
+unmounting read-only filesystem
+umount: SCRATCH_DEV: not mounted
+mounting filesystem with -o norecovery on a read-only device:
+mount: device write-protected, mounting read-only
+unmounting read-only filesystem
+setting device read-write
+mounting filesystem that needs recovery with -o ro:
+*** done
diff --git a/tests/generic/050.out.nojournal b/tests/generic/050.out.nojournal
new file mode 100644 (file)
index 0000000..c652c55
--- /dev/null
@@ -0,0 +1,22 @@
+QA output created by 050
+setting device read-only
+mounting read-only block device:
+mount: device write-protected, mounting read-only
+touching file on read-only filesystem (should fail)
+touch: cannot touch 'SCRATCH_MNT/foo': Read-only file system
+unmounting read-only filesystem
+setting device read-write
+mounting read-write block device:
+touch files
+going down:
+unmounting shutdown filesystem:
+setting device read-only
+mounting filesystem that needs recovery on a read-only device:
+mount: device write-protected, mounting read-only
+unmounting read-only filesystem
+mounting filesystem with -o norecovery on a read-only device:
+mount: device write-protected, mounting read-only
+unmounting read-only filesystem
+setting device read-write
+mounting filesystem that needs recovery with -o ro:
+*** done