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/\.$//"
|
sed -e "s/\.$//"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Older mount output referred to "block device" when mounting RO devices
|
# Older mount output referred to "block device" when mounting RO devices. It's
|
||||||
# It's gone in newer versions
|
# 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() {
|
_filter_ro_mount() {
|
||||||
sed -e "s/mount: block device/mount:/g" \
|
perl -ne '
|
||||||
-e "s/mount: cannot mount block device/mount: cannot mount/g"
|
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
|
# 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
|
# Mount it, and make sure we can't write to it, and we can unmount it again
|
||||||
#
|
#
|
||||||
echo "mounting read-only block device:"
|
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)"
|
echo "touching file on read-only filesystem (should fail)"
|
||||||
touch $SCRATCH_MNT/foo 2>&1 | _filter_scratch
|
touch $SCRATCH_MNT/foo 2>&1 | _filter_scratch
|
||||||
@@ -95,10 +95,10 @@ blockdev --setro $SCRATCH_DEV
|
|||||||
# -o norecovery is used.
|
# -o norecovery is used.
|
||||||
#
|
#
|
||||||
echo "mounting filesystem that needs recovery on a read-only device:"
|
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"
|
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.
|
# 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.
|
# data recovery hack.
|
||||||
#
|
#
|
||||||
echo "mounting filesystem with -o norecovery on a read-only device:"
|
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"
|
echo "unmounting read-only filesystem"
|
||||||
_scratch_unmount 2>&1 | _filter_scratch
|
_scratch_unmount 2>&1 | _filter_scratch
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
QA output created by 050
|
QA output created by 050
|
||||||
setting device read-only
|
setting device read-only
|
||||||
mounting read-only block device:
|
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)
|
touching file on read-only filesystem (should fail)
|
||||||
touch: cannot touch 'SCRATCH_MNT/foo': Read-only file system
|
touch: cannot touch 'SCRATCH_MNT/foo': Read-only file system
|
||||||
unmounting read-only filesystem
|
unmounting read-only filesystem
|
||||||
@@ -12,12 +12,12 @@ going down:
|
|||||||
unmounting shutdown filesystem:
|
unmounting shutdown filesystem:
|
||||||
setting device read-only
|
setting device read-only
|
||||||
mounting filesystem that needs recovery on a read-only device:
|
mounting filesystem that needs recovery on a read-only device:
|
||||||
mount: SCRATCH_DEV is write-protected, mounting read-only
|
mount: device write-protected, mounting read-only
|
||||||
mount: cannot mount SCRATCH_DEV read-only
|
mount: cannot mount device read-only
|
||||||
unmounting read-only filesystem
|
unmounting read-only filesystem
|
||||||
umount: SCRATCH_DEV: not mounted
|
umount: SCRATCH_DEV: not mounted
|
||||||
mounting filesystem with -o norecovery on a read-only device:
|
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
|
unmounting read-only filesystem
|
||||||
setting device read-write
|
setting device read-write
|
||||||
mounting filesystem that needs recovery with -o ro:
|
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" \
|
$MOUNT_PROG -t overlay -o"lowerdir=$lowerdir2:$lowerdir1" \
|
||||||
$OVL_BASE_SCRATCH_MNT $SCRATCH_MNT
|
$OVL_BASE_SCRATCH_MNT $SCRATCH_MNT
|
||||||
touch $SCRATCH_MNT/foo 2>&1 | _filter_scratch
|
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
|
$UMOUNT_PROG $SCRATCH_MNT
|
||||||
|
|
||||||
# Make workdir immutable to prevent workdir re-create on mount
|
# 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.
|
# Verify that overlay is mounted read-only and that it cannot be remounted rw.
|
||||||
_overlay_scratch_mount_dirs $lowerdir2 $upperdir $workdir
|
_overlay_scratch_mount_dirs $lowerdir2 $upperdir $workdir
|
||||||
touch $SCRATCH_MNT/bar 2>&1 | _filter_scratch
|
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
|
# success, all done
|
||||||
status=0
|
status=0
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
QA output created by 035
|
QA output created by 035
|
||||||
touch: cannot touch 'SCRATCH_MNT/foo': Read-only file system
|
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
|
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