diff options
author | Filipe Manana <fdmanana@suse.com> | 2022-04-11 15:08:38 +0100 |
---|---|---|
committer | Eryu Guan <guaneryu@gmail.com> | 2022-04-17 20:01:13 +0800 |
commit | c4cefb1c5ecd92f16fb14d82e8b6542e5fdbb535 (patch) | |
tree | fb7f910225fcb8c39912244575ead0598c2b7aca | |
parent | 0b11a5ecb8e5ca8c2a9a5aa59c493a2d9fd485f8 (diff) | |
download | xfstests-dev-c4cefb1c5ecd92f16fb14d82e8b6542e5fdbb535.tar.gz |
common/rc: fix _try_scratch_mount() and _test_mount() when mount fails
After the recent commit 4a7b35d7a76cd9 ("common: allow to run all tests
on idmapped mounts"), some test that use _try_scratch_mount started to
fail. For example:
$ ./check btrfs/131 btrfs/220
FSTYP -- btrfs
PLATFORM -- Linux/x86_64 debian9 5.17.0-rc8-btrfs-next-114 (...)
MKFS_OPTIONS -- /dev/sdc
MOUNT_OPTIONS -- /dev/sdc /home/fdmanana/btrfs-tests/scratch_1
btrfs/131 2s ... - output mismatch (see .../results//btrfs/131.out.bad)
--- tests/btrfs/131.out 2020-06-10 19:29:03.818519162 +0100
+++ /home/fdmanana/git/hub/xfstests/results//btrfs/131.out.bad (...)
@@ -6,8 +6,6 @@
Disabling free space cache and enabling free space tree
free space tree is enabled
Trying to mount without free space tree
-mount failed
-mount failed
Mounting existing free space tree
free space tree is enabled
...
(Run 'diff -u /home/fdmanana/git/hub/xfstests/tests/btrfs/131.out ...
btrfs/220 7s ... - output mismatch (see .../results//btrfs/220.out.bad)
--- tests/btrfs/220.out 2020-10-16 23:13:46.802162554 +0100
+++ /home/fdmanana/git/hub/xfstests/results//btrfs/220.out.bad (...)
@@ -1,2 +1,32 @@
QA output created by 220
+Option fragment=invalid should fail to mount
+umount: /home/fdmanana/btrfs-tests/scratch_1: not mounted.
+Option nologreplay should fail to mount
+umount: /home/fdmanana/btrfs-tests/scratch_1: not mounted.
+Option norecovery should fail to mount
+umount: /home/fdmanana/btrfs-tests/scratch_1: not mounted.
...
(Run 'diff -u /home/fdmanana/git/hub/xfstests/tests/btrfs/220.out ...
Ran: btrfs/131 btrfs/220
Failures: btrfs/131 btrfs/220
Failed 2 of 2 tests
The reason is that if _try_scratch_mount() fails to mount the filesystem,
we don't return the failure, instead we call _idmapped_mount(), which
can succeed and make _try_scratch_mount() return 0 (success). The same
happens for _test_mount(), however a quick search revealed no tests
currently relying on the return value of _test_mount().
So fix that by making _try_scratch_mount() return immediately if it gets
a mount failure. Also do the same for _test_mount().
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Acked-by: Christian Brauner (Microsoft) <brauner@kernel.org>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
-rw-r--r-- | common/rc | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -329,11 +329,15 @@ _supports_filetype() # mount scratch device with given options but don't check mount status _try_scratch_mount() { + local mount_ret + if [ "$FSTYP" == "overlay" ]; then _overlay_scratch_mount $* return $? fi _mount -t $FSTYP `_scratch_mount_options $*` + mount_ret=$? + [ $mount_ret -ne 0 ] && return $mount_ret _idmapped_mount $SCRATCH_DEV $SCRATCH_MNT } @@ -494,12 +498,16 @@ _idmapped_mount() _test_mount() { + local mount_ret + if [ "$FSTYP" == "overlay" ]; then _overlay_test_mount $* return $? fi _test_options mount _mount -t $FSTYP $TEST_OPTIONS $TEST_FS_MOUNT_OPTS $SELINUX_MOUNT_OPTIONS $* $TEST_DEV $TEST_DIR + mount_ret=$? + [ $mount_ret -ne 0 ] && return $mount_ret _idmapped_mount $TEST_DEV $TEST_DIR } |