xfstests: loop devices vs umount stupidity

Unmounting a fileystem mounted on a loop device doesn't always tear
down the loop device. Its racy, and it causes tests to randomly
fail.

To avoid that, we have to use umount -d to ensure that we destroy
loop devices under filesystems in case the kernel doesn't tear it
down automatically to prevent the test from failing.  However, if
the kernel does tear it down automatically, umount now issues a
warning that it couldn't tear down the loop device because it
couldn't find it, and that causes the test to fail. *facepalm*

So, convert all the loop device unmounts to use -d, and direct the
output of all of them to /dev/null.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Rich Johnston <rjohnston@sgi.com>
Signed-off-by: Rich Johnston <rjohnston@sgi.com>
This commit is contained in:
Dave Chinner
2012-07-26 08:35:04 +00:00
committed by root
parent 427249fe4a
commit 1670bd4f34
6 changed files with 11 additions and 11 deletions
+4 -4
View File
@@ -30,8 +30,8 @@ echo "QA output created by $seq"
_cleanup()
{
cd /
umount $SCRATCH_MNT/test2 > /dev/null 2>&1
umount $SCRATCH_MNT/test > /dev/null 2>&1
umount -d $SCRATCH_MNT/test2 > /dev/null 2>&1
umount -d $SCRATCH_MNT/test > /dev/null 2>&1
rm -f $tmp.*
if [ -w $seq.full ]
@@ -124,11 +124,11 @@ rm -rf $SCRATCH_MNT/test/* >> $seq.full 2>&1 \
|| _fail "!!! clean failed"
_log "umount ext2 on xfs"
umount $SCRATCH_MNT/test2 >> $seq.full 2>&1 \
umount -d $SCRATCH_MNT/test2 >> $seq.full 2>&1 \
|| _fail "!!! umount ext2 failed"
_log "umount xfs"
umount $SCRATCH_MNT/test >> $seq.full 2>&1 \
umount -d $SCRATCH_MNT/test >> $seq.full 2>&1 \
|| _fail "!!! umount xfs failed"
echo "--- mounts at end (before cleanup)" >> $seq.full
+1 -1
View File
@@ -120,7 +120,7 @@ _verify_copy()
echo unmounting and removing new image
umount $source_dir
umount -d $target_dir
umount -d $target_dir > /dev/null 2>&1
rm -f $target
}
+2 -2
View File
@@ -37,7 +37,7 @@ _cleanup()
{
cd /
rm -f $tmp.*
umount $LOOP_MNT 2>/dev/null
umount -d $LOOP_MNT 2>/dev/null
rmdir $LOOP_MNT
_cleanup_testdir
}
@@ -98,7 +98,7 @@ _grow_loop()
$XFS_GROWFS_PROG $LOOP_MNT 2>&1 | _filter_growfs 2>&1
echo "*** unmount"
umount $LOOP_MNT
umount -d $LOOP_MNT > /dev/null 2>&1
# Large grows takes forever to check..
if [ "$check" -gt "0" ]
+1 -1
View File
@@ -63,7 +63,7 @@ _do_mkfs()
-d name=$LOOP_DEV,size=${i}g |grep log
mount -o loop -t xfs $LOOP_DEV $LOOP_MNT
echo "test write" > $LOOP_MNT/test
umount $LOOP_MNT
umount -d $LOOP_MNT > /dev/null 2>&1
done
}
# make large holey file
+1 -1
View File
@@ -65,7 +65,7 @@ _do_mkfs()
-d name=$LOOP_DEV,size=${i}g |grep log
mount -o loop -t xfs $LOOP_DEV $LOOP_MNT
echo "test write" > $LOOP_MNT/test
umount $LOOP_MNT
umount -d $LOOP_MNT > /dev/null 2>&1
done
}
# make large holey file
+2 -2
View File
@@ -34,7 +34,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15
_cleanup()
{
cd /
umount $LOOP_MNT 2>/dev/null
umount -d $LOOP_MNT 2>/dev/null
rm -f $LOOP_DEV
rmdir $LOOP_MNT
_cleanup_testdir
@@ -85,7 +85,7 @@ _test_loop()
xfs_io -f -c "resvsp 0 $fsize" $LOOP_MNT/foo | _filter_io
echo "*** unmount loop filesystem"
umount $LOOP_MNT
umount -d $LOOP_MNT > /dev/null 2>&1
echo "*** check loop filesystem"
_check_xfs_filesystem $LOOP_DEV none none