aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnand Jain <anand.jain@oracle.com>2023-11-02 19:28:20 +0800
committerZorro Lang <zlang@kernel.org>2023-11-16 10:42:39 +0800
commit7139a0600084b2b8e42cc46743bade5444bd1ba8 (patch)
treefcb20a0ff79d921cb64879a6d19005bab509fb6e
parent24c58f2d973c855cc0af0a12e225fd2f07b342d4 (diff)
downloadxfstests-dev-7139a0600084b2b8e42cc46743bade5444bd1ba8.tar.gz
btrfs/219: fix _cleanup() to successful release the loop-device
When we fail with the message 'We were allowed to mount when we should have failed,' it will fail to clean up the loop devices, making it difficult to run further test cases or the same test case again. So we need a 2nd loop device local variable to release it. Let's reorganize the local variables to clean them up in the _cleanup() function. Signed-off-by: Anand Jain <anand.jain@oracle.com> Reviewed-by: Filipe Manana <fdmanana@suse.com> Signed-off-by: Zorro Lang <zlang@kernel.org>
-rwxr-xr-xtests/btrfs/21963
1 files changed, 36 insertions, 27 deletions
diff --git a/tests/btrfs/219 b/tests/btrfs/219
index b747ce34fc..35824df2ba 100755
--- a/tests/btrfs/219
+++ b/tests/btrfs/219
@@ -19,14 +19,19 @@ _cleanup()
{
cd /
rm -f $tmp.*
- if [ ! -z "$loop_mnt" ]; then
- $UMOUNT_PROG $loop_mnt
- rm -rf $loop_mnt
- fi
- [ ! -z "$loop_mnt1" ] && rm -rf $loop_mnt1
- [ ! -z "$fs_img1" ] && rm -rf $fs_img1
- [ ! -z "$fs_img2" ] && rm -rf $fs_img2
- [ ! -z "$loop_dev" ] && _destroy_loop_device $loop_dev
+
+ # The variables are set before the test case can fail.
+ $UMOUNT_PROG ${loop_mnt1} &> /dev/null
+ $UMOUNT_PROG ${loop_mnt2} &> /dev/null
+ rm -rf $loop_mnt1
+ rm -rf $loop_mnt2
+
+ [ ! -z $loop_dev1 ] && _destroy_loop_device $loop_dev1
+ [ ! -z $loop_dev1 ] && _destroy_loop_device $loop_dev2
+
+ rm -f $fs_img1
+ rm -f $fs_img2
+
_btrfs_rescan_devices
}
@@ -36,56 +41,60 @@ _cleanup()
# real QA test starts here
_supported_fs btrfs
+
+loop_mnt1=$TEST_DIR/$seq/mnt1
+loop_mnt2=$TEST_DIR/$seq/mnt2
+fs_img1=$TEST_DIR/$seq/img1
+fs_img2=$TEST_DIR/$seq/img2
+loop_dev1=""
+loop_dev2=""
+
_require_test
_require_loop
_require_btrfs_forget_or_module_loadable
_fixed_by_kernel_commit 5f58d783fd78 \
"btrfs: free device in btrfs_close_devices for a single device filesystem"
-loop_mnt=$TEST_DIR/$seq.mnt
-loop_mnt1=$TEST_DIR/$seq.mnt1
-fs_img1=$TEST_DIR/$seq.img1
-fs_img2=$TEST_DIR/$seq.img2
-
-mkdir $loop_mnt
-mkdir $loop_mnt1
+mkdir -p $loop_mnt1
+mkdir -p $loop_mnt2
$XFS_IO_PROG -f -c "truncate 256m" $fs_img1 >>$seqres.full 2>&1
_mkfs_dev $fs_img1 >>$seqres.full 2>&1
cp $fs_img1 $fs_img2
+loop_dev1=`_create_loop_device $fs_img1`
+loop_dev2=`_create_loop_device $fs_img2`
+
# Normal single device case, should pass just fine
-_mount -o loop $fs_img1 $loop_mnt > /dev/null 2>&1 || \
+_mount $loop_dev1 $loop_mnt1 > /dev/null 2>&1 || \
_fail "Couldn't do initial mount"
-$UMOUNT_PROG $loop_mnt
+$UMOUNT_PROG $loop_mnt1
_btrfs_forget_or_module_reload
# Now mount the new version again to get the higher generation cached, umount
# and try to mount the old version. Mount the new version again just for good
# measure.
-loop_dev=`_create_loop_device $fs_img1`
-
-_mount $loop_dev $loop_mnt > /dev/null 2>&1 || \
+_mount $loop_dev1 $loop_mnt1 > /dev/null 2>&1 || \
_fail "Failed to mount the second time"
-$UMOUNT_PROG $loop_mnt
+$UMOUNT_PROG $loop_mnt1
-_mount -o loop $fs_img2 $loop_mnt > /dev/null 2>&1 || \
+_mount $loop_dev2 $loop_mnt2 > /dev/null 2>&1 || \
_fail "We couldn't mount the old generation"
-$UMOUNT_PROG $loop_mnt
+$UMOUNT_PROG $loop_mnt2
-_mount $loop_dev $loop_mnt > /dev/null 2>&1 || \
+_mount $loop_dev1 $loop_mnt1 > /dev/null 2>&1 || \
_fail "Failed to mount the second time"
-$UMOUNT_PROG $loop_mnt
+$UMOUNT_PROG $loop_mnt1
# Now we definitely can't mount them at the same time, because we're still tied
# to the limitation of one fs_devices per fsid.
_btrfs_forget_or_module_reload
-_mount $loop_dev $loop_mnt > /dev/null 2>&1 || \
+_mount $loop_dev1 $loop_mnt1 > /dev/null 2>&1 || \
_fail "Failed to mount the third time"
-_mount -o loop $fs_img2 $loop_mnt1 > /dev/null 2>&1 && \
+_mount $loop_dev2 $loop_mnt2 > /dev/null 2>&1 && \
_fail "We were allowed to mount when we should have failed"
_btrfs_rescan_devices