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>
This commit is contained in:
Eryu Guan
2017-11-14 18:26:45 +08:00
parent 40737eac01
commit 69854f8dc5
5 changed files with 67 additions and 16 deletions
+55 -4
View File
@@ -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
+4 -4
View File
@@ -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
+4 -4
View File
@@ -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:
+2 -2
View File
@@ -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
+2 -2
View File
@@ -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