mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
xfs/049: umount -d fails when kernel wins teardown race
When /etc/mtab is linked to /proc/mounts and we are using mount time created loop devices (i.e. mount -o loop), the unmount can fail with this amazingly informative error message: umount: /mnt/scratch/test2: filesystem was unmounted, but mount(8) failed: Invalid argument What it actually means in this case is that the kernel tore down the loop device when the last reference went away, and it did it so fast that mount was not able to find it in /etc/mtab after the unmount syscall. Hence it could not find the loop device it was supposed to tear down and has a hissy fit. This is simple to fix: mount does not need to tear down the loop device as the kernel does it automatically. Remove the "-d" from the umount command, and the test passes again. There's quite a few other tests that also use umount -d - fix them as well. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Brian Foster <bfoster@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
committed by
Dave Chinner
parent
354108ebb9
commit
ee6ad7f578
+4
-4
@@ -29,8 +29,8 @@ echo "QA output created by $seq"
|
||||
_cleanup()
|
||||
{
|
||||
cd /
|
||||
umount -d $SCRATCH_MNT/test2 > /dev/null 2>&1
|
||||
umount -d $SCRATCH_MNT/test > /dev/null 2>&1
|
||||
umount $SCRATCH_MNT/test2 > /dev/null 2>&1
|
||||
umount $SCRATCH_MNT/test > /dev/null 2>&1
|
||||
rm -f $tmp.*
|
||||
|
||||
if [ -w $seqres.full ]
|
||||
@@ -123,11 +123,11 @@ rm -rf $SCRATCH_MNT/test/* >> $seqres.full 2>&1 \
|
||||
|| _fail "!!! clean failed"
|
||||
|
||||
_log "umount ext2 on xfs"
|
||||
umount -d $SCRATCH_MNT/test2 >> $seqres.full 2>&1 \
|
||||
umount $SCRATCH_MNT/test2 >> $seqres.full 2>&1 \
|
||||
|| _fail "!!! umount ext2 failed"
|
||||
|
||||
_log "umount xfs"
|
||||
umount -d $SCRATCH_MNT/test >> $seqres.full 2>&1 \
|
||||
umount $SCRATCH_MNT/test >> $seqres.full 2>&1 \
|
||||
|| _fail "!!! umount xfs failed"
|
||||
|
||||
echo "--- mounts at end (before cleanup)" >> $seqres.full
|
||||
|
||||
+3
-3
@@ -41,9 +41,9 @@ _cleanup()
|
||||
{
|
||||
cd /
|
||||
umount $SCRATCH_MNT 2>/dev/null
|
||||
umount -d $imgs.loop 2>/dev/null
|
||||
umount $imgs.loop 2>/dev/null
|
||||
[ -d $imgs.loop ] && rmdir $imgs.loop
|
||||
umount -d $imgs.source_dir 2>/dev/null
|
||||
umount $imgs.source_dir 2>/dev/null
|
||||
[ -d $imgs.source_dir ] && rm -rf $imgs.source_dir
|
||||
rm -f $imgs.* $tmp.* /var/tmp/xfs_copy.log.*
|
||||
}
|
||||
@@ -119,7 +119,7 @@ _verify_copy()
|
||||
|
||||
echo unmounting and removing new image
|
||||
umount $source_dir
|
||||
umount -d $target_dir > /dev/null 2>&1
|
||||
umount $target_dir > /dev/null 2>&1
|
||||
rm -f $target
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -36,7 +36,7 @@ _cleanup()
|
||||
{
|
||||
cd /
|
||||
rm -f $tmp.*
|
||||
umount -d $LOOP_MNT 2>/dev/null
|
||||
umount $LOOP_MNT 2>/dev/null
|
||||
rmdir $LOOP_MNT
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ _grow_loop()
|
||||
$XFS_GROWFS_PROG $LOOP_MNT 2>&1 | _filter_growfs 2>&1
|
||||
|
||||
echo "*** unmount"
|
||||
umount -d $LOOP_MNT > /dev/null 2>&1
|
||||
umount $LOOP_MNT > /dev/null 2>&1
|
||||
|
||||
# Large grows takes forever to check..
|
||||
if [ "$check" -gt "0" ]
|
||||
|
||||
+1
-1
@@ -60,7 +60,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 -d $LOOP_MNT > /dev/null 2>&1
|
||||
umount $LOOP_MNT > /dev/null 2>&1
|
||||
done
|
||||
}
|
||||
# make large holey file
|
||||
|
||||
+1
-1
@@ -62,7 +62,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 -d $LOOP_MNT > /dev/null 2>&1
|
||||
umount $LOOP_MNT > /dev/null 2>&1
|
||||
|
||||
# punch out the previous blocks so that we keep the amount of
|
||||
# disk space the test requires down to a minimum.
|
||||
|
||||
+2
-2
@@ -33,7 +33,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15
|
||||
_cleanup()
|
||||
{
|
||||
cd /
|
||||
umount -d $LOOP_MNT 2>/dev/null
|
||||
umount $LOOP_MNT 2>/dev/null
|
||||
rm -f $LOOP_DEV
|
||||
rmdir $LOOP_MNT
|
||||
}
|
||||
@@ -84,7 +84,7 @@ _test_loop()
|
||||
xfs_io -f -c "resvsp 0 $fsize" $LOOP_MNT/foo | _filter_io
|
||||
|
||||
echo "*** unmount loop filesystem"
|
||||
umount -d $LOOP_MNT > /dev/null 2>&1
|
||||
umount $LOOP_MNT > /dev/null 2>&1
|
||||
|
||||
echo "*** check loop filesystem"
|
||||
_check_xfs_filesystem $LOOP_DEV none none
|
||||
|
||||
Reference in New Issue
Block a user