* [PATCH 1/3] generic/050: Fix test failure for filesystems without journal
2019-11-11 14:49 [PATCH 0/3 v2] Fix generic/050 for filesystems without journal Jan Kara
@ 2019-11-11 14:49 ` Jan Kara
2019-11-11 14:49 ` [PATCH 2/3] generic/050: Handle xfs quota special case with different output Jan Kara
2019-11-11 14:49 ` [PATCH 3/3] generic/050: Consistently remove traling dot from umount output Jan Kara
2 siblings, 0 replies; 4+ messages in thread
From: Jan Kara @ 2019-11-11 14:49 UTC (permalink / raw)
To: fstests; +Cc: Darrick J. Wong, Eryu Guan, Jan Kara
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>
---
common/rc | 33 +++++++++++++++++++++++-------
tests/generic/050 | 8 ++++++++
tests/generic/050.cfg | 1 +
tests/generic/{050.out => 050.out.default} | 0
tests/generic/050.out.nojournal | 22 ++++++++++++++++++++
5 files changed, 57 insertions(+), 7 deletions(-)
create mode 100644 tests/generic/050.cfg
rename tests/generic/{050.out => 050.out.default} (100%)
create mode 100644 tests/generic/050.out.nojournal
diff --git a/common/rc b/common/rc
index ef0c250923e4..753bce7fc8a9 100644
--- 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,26 +3169,37 @@ _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
;;
*)
@@ -3197,6 +3208,14 @@ _require_metadata_journaling()
esac
}
+_require_metadata_journaling()
+{
+ msg=$(_has_metadata_journaling $@)
+ if [ -n "$msg" ]; then
+ _notrun "$msg"
+ fi
+}
+
_count_extents()
{
$XFS_IO_PROG -c "fiemap" $1 | tail -n +2 | grep -v hole | wc -l
diff --git a/tests/generic/050 b/tests/generic/050
index 91632d2d0010..a8d648e5eede 100755
--- a/tests/generic/050
+++ b/tests/generic/050
@@ -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
index 000000000000..c76bd473873b
--- /dev/null
+++ b/tests/generic/050.cfg
@@ -0,0 +1 @@
+nojournal: nojournal
diff --git a/tests/generic/050.out b/tests/generic/050.out.default
similarity index 100%
rename from tests/generic/050.out
rename to tests/generic/050.out.default
diff --git a/tests/generic/050.out.nojournal b/tests/generic/050.out.nojournal
new file mode 100644
index 000000000000..c652c555aae4
--- /dev/null
+++ b/tests/generic/050.out.nojournal
@@ -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
--
2.16.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/3] generic/050: Handle xfs quota special case with different output
2019-11-11 14:49 [PATCH 0/3 v2] Fix generic/050 for filesystems without journal Jan Kara
2019-11-11 14:49 ` [PATCH 1/3] generic/050: Fix test failure " Jan Kara
@ 2019-11-11 14:49 ` Jan Kara
2019-11-11 14:49 ` [PATCH 3/3] generic/050: Consistently remove traling dot from umount output Jan Kara
2 siblings, 0 replies; 4+ messages in thread
From: Jan Kara @ 2019-11-11 14:49 UTC (permalink / raw)
To: fstests; +Cc: Darrick J. Wong, Eryu Guan, Jan Kara
Instead of faking output for the case of XFS with quotas, just use a
different output file with appropriate output.
Signed-off-by: Jan Kara <jack@suse.cz>
---
tests/generic/050 | 62 ++++++++++++------------------------------
tests/generic/050.cfg | 1 +
tests/generic/050.out.xfsquota | 25 +++++++++++++++++
3 files changed, 43 insertions(+), 45 deletions(-)
create mode 100644 tests/generic/050.out.xfsquota
diff --git a/tests/generic/050 b/tests/generic/050
index a8d648e5eede..1c275d8b0601 100755
--- a/tests/generic/050
+++ b/tests/generic/050
@@ -39,27 +39,15 @@ _require_norecovery
features=""
if ! _has_metadata_journaling $SCRATCH_DEV >/dev/null; then
features="nojournal"
+elif [ "$FSTYP" = "xfs" ] && echo "$MOUNT_OPTIONS" | grep -q quota ; then
+ # Mounting with quota on XFS requires a writable fs, which means
+ # we expect to fail the ro blockdev test with with EPERM.
+ features="xfsquota"
fi
_link_out_file "$features"
_scratch_mkfs >/dev/null 2>&1
-filter_ro_mount() {
- local arg=""
-
- if [ -n "$expect_mount_failure" ]; then
- arg="s|mount: $SCRATCH_MNT: permission denied|mount: device write-protected, mounting read-only|g"
- fi
- sed -e "$arg" | _filter_ro_mount
-}
-
-# Mounting with quota on XFS requires a writable fs, which means
-# we expect to fail the ro blockdev test with with EPERM.
-expect_mount_failure=
-if [ "$FSTYP" = "xfs" ] && echo "$MOUNT_OPTIONS" | grep -q quota ; then
- expect_mount_failure=1
-fi
-
#
# Mark the device read-only
#
@@ -70,25 +58,16 @@ blockdev --setro $SCRATCH_DEV
# Mount it, and make sure we can't write to it, and we can unmount it again
#
echo "mounting read-only block device:"
-_try_scratch_mount 2>&1 | filter_ro_mount
-if [ "${PIPESTATUS[0]}" -eq 0 ]; then
- echo "touching file on read-only filesystem (should fail)"
- touch $SCRATCH_MNT/foo 2>&1 | _filter_scratch
-
- #
- # Apparently this used to be broken at some point:
- # http://oss.sgi.com/bugzilla/show_bug.cgi?id=807
- #
- echo "unmounting read-only filesystem"
- _scratch_unmount 2>&1 | _filter_scratch
-elif [ -n "${expect_mount_failure}" ]; then
- # Mount failed, so simulate EROFS instead of scribbling on root fs
- echo "touching file on read-only filesystem (should fail)"
- echo "touch: cannot touch 'SCRATCH_MNT/foo': Read-only file system"
- echo "unmounting read-only filesystem"
-else
- echo "Mount failed, though it wasn't supposed to!"
-fi
+_try_scratch_mount 2>&1 | _filter_ro_mount
+echo "touching file on read-only filesystem (should fail)"
+touch $SCRATCH_MNT/foo 2>&1 | _filter_scratch
+
+#
+# Apparently this used to be broken at some point:
+# http://oss.sgi.com/bugzilla/show_bug.cgi?id=807
+#
+echo "unmounting read-only filesystem"
+_scratch_unmount 2>&1 | _filter_scratch
echo "setting device read-write"
blockdev --setrw $SCRATCH_DEV
@@ -124,16 +103,9 @@ _scratch_unmount 2>&1 | _filter_scratch | _filter_ending_dot
# data recovery hack.
#
echo "mounting filesystem with -o norecovery on a read-only device:"
-_try_scratch_mount -o norecovery 2>&1 | filter_ro_mount
-if [ "${PIPESTATUS[0]}" -eq 0 ]; then
- echo "unmounting read-only filesystem"
- _scratch_unmount 2>&1 | _filter_scratch
-elif [ -n "${expect_mount_failure}" ]; then
- # Mount failed, simulate correct output
- echo "unmounting read-only filesystem"
-else
- echo "Mount failed, though it wasn't supposed to!"
-fi
+_try_scratch_mount -o norecovery 2>&1 | _filter_ro_mount
+echo "unmounting read-only filesystem"
+_scratch_unmount 2>&1 | _filter_scratch
echo "setting device read-write"
blockdev --setrw $SCRATCH_DEV
diff --git a/tests/generic/050.cfg b/tests/generic/050.cfg
index c76bd473873b..1d9d60bc69a0 100644
--- a/tests/generic/050.cfg
+++ b/tests/generic/050.cfg
@@ -1 +1,2 @@
nojournal: nojournal
+xfsquota: xfsquota
diff --git a/tests/generic/050.out.xfsquota b/tests/generic/050.out.xfsquota
new file mode 100644
index 000000000000..49b46241b39f
--- /dev/null
+++ b/tests/generic/050.out.xfsquota
@@ -0,0 +1,25 @@
+QA output created by 050
+setting device read-only
+mounting read-only block device:
+mount: /mnt-scratch: permission denied
+touching file on read-only filesystem (should fail)
+unmounting read-only filesystem
+umount: SCRATCH_DEV: not mounted.
+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: /mnt-scratch: permission denied
+unmounting read-only filesystem
+umount: SCRATCH_DEV: not mounted.
+setting device read-write
+mounting filesystem that needs recovery with -o ro:
+*** done
--
2.16.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 3/3] generic/050: Consistently remove traling dot from umount output
2019-11-11 14:49 [PATCH 0/3 v2] Fix generic/050 for filesystems without journal Jan Kara
2019-11-11 14:49 ` [PATCH 1/3] generic/050: Fix test failure " Jan Kara
2019-11-11 14:49 ` [PATCH 2/3] generic/050: Handle xfs quota special case with different output Jan Kara
@ 2019-11-11 14:49 ` Jan Kara
2 siblings, 0 replies; 4+ messages in thread
From: Jan Kara @ 2019-11-11 14:49 UTC (permalink / raw)
To: fstests; +Cc: Darrick J. Wong, Eryu Guan, Jan Kara
We did not consistently remove trailing dot from umount output which can
presumably lead to false failures with particular versions of
util-linux. Make sure all umount output is properly filtered.
Signed-off-by: Jan Kara <jack@suse.cz>
---
tests/generic/050 | 4 ++--
tests/generic/050.out.xfsquota | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/tests/generic/050 b/tests/generic/050
index 1c275d8b0601..cf2b93814267 100755
--- a/tests/generic/050
+++ b/tests/generic/050
@@ -67,7 +67,7 @@ touch $SCRATCH_MNT/foo 2>&1 | _filter_scratch
# http://oss.sgi.com/bugzilla/show_bug.cgi?id=807
#
echo "unmounting read-only filesystem"
-_scratch_unmount 2>&1 | _filter_scratch
+_scratch_unmount 2>&1 | _filter_scratch | _filter_ending_dot
echo "setting device read-write"
blockdev --setrw $SCRATCH_DEV
@@ -105,7 +105,7 @@ _scratch_unmount 2>&1 | _filter_scratch | _filter_ending_dot
echo "mounting filesystem with -o norecovery on a read-only device:"
_try_scratch_mount -o norecovery 2>&1 | _filter_ro_mount
echo "unmounting read-only filesystem"
-_scratch_unmount 2>&1 | _filter_scratch
+_scratch_unmount 2>&1 | _filter_scratch | _filter_ending_dot
echo "setting device read-write"
blockdev --setrw $SCRATCH_DEV
diff --git a/tests/generic/050.out.xfsquota b/tests/generic/050.out.xfsquota
index 49b46241b39f..f204bd2fbe70 100644
--- a/tests/generic/050.out.xfsquota
+++ b/tests/generic/050.out.xfsquota
@@ -4,7 +4,7 @@ mounting read-only block device:
mount: /mnt-scratch: permission denied
touching file on read-only filesystem (should fail)
unmounting read-only filesystem
-umount: SCRATCH_DEV: not mounted.
+umount: SCRATCH_DEV: not mounted
setting device read-write
mounting read-write block device:
touch files
@@ -19,7 +19,7 @@ umount: SCRATCH_DEV: not mounted
mounting filesystem with -o norecovery on a read-only device:
mount: /mnt-scratch: permission denied
unmounting read-only filesystem
-umount: SCRATCH_DEV: not mounted.
+umount: SCRATCH_DEV: not mounted
setting device read-write
mounting filesystem that needs recovery with -o ro:
*** done
--
2.16.4
^ permalink raw reply related [flat|nested] 4+ messages in thread