diff options
author | Eryu Guan <eguan@redhat.com> | 2017-11-14 18:26:45 +0800 |
---|---|---|
committer | Eryu Guan <eguan@redhat.com> | 2017-11-26 15:38:55 +0800 |
commit | 69854f8dc5cec666578477a2e7979bcb4ea91cf5 (patch) | |
tree | 03d050be7e6f7d6c1ed525080f168552e8579318 | |
parent | 40737eac013e03d7daa09dbf0de8887f14a23853 (diff) | |
download | xfstests-69854f8dc5cec666578477a2e7979bcb4ea91cf5.tar.gz |
fstests: filter readonly mount error messages
util-linux commit 6dede2f2f7c5 ("libmount: support MS_RDONLY on
write-protected devices") changed the error message on read-only
block device, and in the failure case printed one line message
instead of two (for details please see comments in common/filter),
and this change broke generic/050 and overlay/035.
Fix it by adding more filter rules to _filter_ro_mount and updating
associated .out files to unify the output from both old and new
util-linux versions.
Reviewed-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
-rw-r--r-- | common/filter | 59 | ||||
-rwxr-xr-x | tests/generic/050 | 8 | ||||
-rw-r--r-- | tests/generic/050.out | 8 | ||||
-rwxr-xr-x | tests/overlay/035 | 4 | ||||
-rw-r--r-- | tests/overlay/035.out | 4 |
5 files changed, 67 insertions, 16 deletions
diff --git a/common/filter b/common/filter index a212c09aa1..9c33efacea 100644 --- a/common/filter +++ b/common/filter @@ -397,11 +397,62 @@ _filter_ending_dot() sed -e "s/\.$//" } -# Older mount output referred to "block device" when mounting RO devices -# It's gone in newer versions +# Older mount output referred to "block device" when mounting RO devices. It's +# gone in newer versions. v2.30 changed the output again. This filter is to +# unify all read-only mount messages across all util-linux versions. +# +# for a successful ro mount: +# ancient: mount: block device <device> is write-protected, mounting read-only +# prior to v2.30: mount: <device> is write-protected, mounting read-only +# v2.30 and later: mount: <mountpoint>: WARNING: device write-protected, mounted read-only. +# +# a failed ro mount: +# ancient (two-line message): +# mount: block device <device> is write-protected, mounting read-only +# mount: cannot mount block device <device> read-only +# prior to v2.30 (two-line message): +# mount: <device> is write-protected, mounting read-only +# mount: cannot mount <device> read-only +# v2.30 and later (single-line message): +# mount: <mountpoint>: cannot mount <device> read-only. +# +# a failed rw remount: +# ancient: mount: cannot remount block device <device> read-write, is write-protected +# prior to v2.30: mount: cannot remount <device> read-write, is write-protected +# v2.30 and later: mount: <mountpoint>: cannot remount <device> read-write, is write-protected. +# +# Now use _filter_ro_mount to unify all these differences across old & new +# util-linux versions. So the filtered format would be: +# +# successful ro mount: +# mount: device write-protected, mounting read-only +# +# failed ro mount: +# mount: device write-protected, mounting read-only +# mount: cannot mount device read-only +# +# failed rw remount: +# mount: cannot remount device read-write, is write-protected _filter_ro_mount() { - sed -e "s/mount: block device/mount:/g" \ - -e "s/mount: cannot mount block device/mount: cannot mount/g" + perl -ne ' + if (/write-protected, mount.*read-only/) { + # filter successful ro mount, and first line of prior to v2.30 + # format failed ro mount + print "mount: device write-protected, mounting read-only\n"; + } elsif (/mount: .*: cannot mount.*read-only/) { + # filter v2.30 format failed ro mount, convert single-line + # message to two-line message + print "mount: device write-protected, mounting read-only\n"; + print "mount: cannot mount device read-only\n"; + } elsif (/^mount: cannot mount .* read-only$/) { + # filter prior to v2.30 format failed ro mount + print "mount: cannot mount device read-only\n"; + } elsif (/mount:.* cannot remount .* read-write.*/) { + # filter failed rw remount + print "mount: cannot remount device read-write, is write-protected\n"; + } else { + print "$_"; + }' | _filter_ending_dot } # Filter a failed mount output due to EUCLEAN and USTALE, util-linux changed diff --git a/tests/generic/050 b/tests/generic/050 index 5fa28a7648..efa45f0482 100755 --- a/tests/generic/050 +++ b/tests/generic/050 @@ -60,7 +60,7 @@ 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:" -_scratch_mount 2>&1 | _filter_scratch | _filter_ro_mount +_scratch_mount 2>&1 | _filter_ro_mount echo "touching file on read-only filesystem (should fail)" touch $SCRATCH_MNT/foo 2>&1 | _filter_scratch @@ -95,10 +95,10 @@ blockdev --setro $SCRATCH_DEV # -o norecovery is used. # echo "mounting filesystem that needs recovery on a read-only device:" -_scratch_mount 2>&1 | _filter_scratch | _filter_ro_mount +_scratch_mount 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 # # This is the way out if the underlying device really is read-only. @@ -106,7 +106,7 @@ _scratch_unmount 2>&1 | _filter_scratch # data recovery hack. # echo "mounting filesystem with -o norecovery on a read-only device:" -_scratch_mount -o norecovery 2>&1 | _filter_scratch | _filter_ro_mount +_scratch_mount -o norecovery 2>&1 | _filter_ro_mount echo "unmounting read-only filesystem" _scratch_unmount 2>&1 | _filter_scratch diff --git a/tests/generic/050.out b/tests/generic/050.out index fb90f6ea58..7d70ddee83 100644 --- a/tests/generic/050.out +++ b/tests/generic/050.out @@ -1,7 +1,7 @@ QA output created by 050 setting device read-only mounting read-only block device: -mount: SCRATCH_DEV is write-protected, mounting read-only +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 @@ -12,12 +12,12 @@ going down: unmounting shutdown filesystem: setting device read-only mounting filesystem that needs recovery on a read-only device: -mount: SCRATCH_DEV is write-protected, mounting read-only -mount: cannot mount SCRATCH_DEV read-only +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: SCRATCH_DEV is write-protected, mounting read-only +mount: device write-protected, mounting read-only unmounting read-only filesystem setting device read-write mounting filesystem that needs recovery with -o ro: diff --git a/tests/overlay/035 b/tests/overlay/035 index 64fcd70810..05447741a1 100755 --- a/tests/overlay/035 +++ b/tests/overlay/035 @@ -69,7 +69,7 @@ mkdir -p $lowerdir1 $lowerdir2 $upperdir $workdir $MOUNT_PROG -t overlay -o"lowerdir=$lowerdir2:$lowerdir1" \ $OVL_BASE_SCRATCH_MNT $SCRATCH_MNT touch $SCRATCH_MNT/foo 2>&1 | _filter_scratch -_scratch_remount rw 2>&1 | _filter_scratch +_scratch_remount rw 2>&1 | _filter_ro_mount $UMOUNT_PROG $SCRATCH_MNT # Make workdir immutable to prevent workdir re-create on mount @@ -79,7 +79,7 @@ $CHATTR_PROG +i $workdir # Verify that overlay is mounted read-only and that it cannot be remounted rw. _overlay_scratch_mount_dirs $lowerdir2 $upperdir $workdir touch $SCRATCH_MNT/bar 2>&1 | _filter_scratch -_scratch_remount rw 2>&1 | _filter_scratch +_scratch_remount rw 2>&1 | _filter_ro_mount # success, all done status=0 diff --git a/tests/overlay/035.out b/tests/overlay/035.out index 5a5f677714..e08ba2ebc6 100644 --- a/tests/overlay/035.out +++ b/tests/overlay/035.out @@ -1,5 +1,5 @@ QA output created by 035 touch: cannot touch 'SCRATCH_MNT/foo': Read-only file system -mount: cannot remount SCRATCH_DEV read-write, is write-protected +mount: cannot remount device read-write, is write-protected touch: cannot touch 'SCRATCH_MNT/bar': Read-only file system -mount: cannot remount SCRATCH_DEV read-write, is write-protected +mount: cannot remount device read-write, is write-protected |