mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
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:
+55
-4
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user