275: Fix to test and pass properly

This is a significant rework of 275, which made too many
assumptions about details of space usage and failed on several
filesystems (it passed on xfs, but only by accident).

This new version tries to leave about 256k free, then tries
a single 1M IO, and fails only if 0 bytes are written.

It also sends a lot more to $seq.full for debugging on failure,
doesn't rm -rf $SCRATC_MNT, and fixes a few other stylistic things.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
This commit is contained in:
Eric Sandeen
2012-09-10 20:46:10 -05:00
parent 187e92903f
commit e48ba4f74a
2 changed files with 33 additions and 27 deletions
+32 -26
View File
@@ -1,8 +1,8 @@
#! /bin/bash
# FS QA Test No. 275
#
# The posix write test. when write size is larger than disk free size,
# should write as more as possible
# The posix write test. When write size is larger than disk free size,
# should write as much as possible until ENOSPC.
#
#-----------------------------------------------------------------------
# Copyright (c) 2011-2012 Fujitsu, Inc. All Rights Reserved.
@@ -30,13 +30,12 @@ echo "QA output created by $seq"
here=`pwd`
tmp=/tmp/$$
status=0 # success is the default!
status=1 # failure is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15
_cleanup()
{
cd /
rm -f $SCRATCH_MNT/* $tmp.*
_scratch_unmount
}
@@ -49,41 +48,48 @@ _supported_os IRIX Linux
_require_scratch
echo "------------------------------"
echo "write lack test"
echo "write until ENOSPC test"
echo "------------------------------"
rm -f $seq.full
umount $SCRATCH_DEV 2>/dev/null
_scratch_mkfs_sized $((1 * 1024 * 1024 * 1024)) >>$seq.full 2>&1
_scratch_mkfs_sized $((2 * 1024 * 1024 * 1024)) >>$seq.full 2>&1
_scratch_mount
rm -rf $SCRATCH_MNT/*
cd $SCRATCH_MNT
dd if=/dev/zero of=tmp1 bs=4K count=1 >/dev/null 2>&1
if [ $? -ne 0 ]
then
echo "create file err"
status=1
exit
fi
dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=256K count=1 >>$seq.full 2>&1
[ $? -ne 0 ] && _fail "Error creating file"
dd if=/dev/zero of=tmp2 bs=1M >/dev/null 2>&1
dd if=/dev/zero of=tmp3 bs=4K >/dev/null 2>&1
# Attempt to completely fill fs
dd if=/dev/zero of=$SCRATCH_MNT/tmp2 bs=1M >>$seq.full 2>&1
sync
rm -f tmp1
dd if=/dev/zero of=$SCRATCH_MNT/tmp3 bs=4K >>$seq.full 2>&1
sync
# Last effort, use O_SYNC
dd if=/dev/zero of=$SCRATCH_MNT/tmp4 bs=4K oflag=sync >>$seq.full 2>&1
# Save space usage info to the full file
echo "Pre rm space:" >> $seq.full
df $SCRATCH_MNT >>$seq.full 2>&1
dd if=/dev/zero of=tmp1 bs=8K count=1 >/dev/null 2>&1
_filesize=`du tmp1 | awk '{print $1}'`
if [ $_filesize -ne 4 ]
then
echo "write file err"
status=1
exit
fi
# Should leave approx 256k free
rm -f $SCRATCH_MNT/tmp1
sync
echo "Post rm space:" >> $seq.full
df $SCRATCH_MNT >>$seq.full 2>&1
_freespace=`df -k $SCRATCH_MNT | tail -n 1 | awk '{print $4}'`
[ $_freespace -gt 1024 ] && _fail "could not sufficiently fill filesystem"
# Try a write larger than available space
dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=1M count=1 >>$seq.full 2>&1
echo "Bytes written until ENOSPC:" >>$seq.full
du $SCRATCH_MNT/tmp1 >>$seq.full
# And at least some of it should succeed.
_filesize=`ls -l $SCRATCH_MNT/tmp1 | awk '{print $5}'`
[ $_filesize -eq 0 ] && _fail "write file err: Partial write until enospc failed; wrote 0 bytes."
echo "done"
status=0
exit
+1 -1
View File
@@ -1,5 +1,5 @@
QA output created by 275
------------------------------
write lack test
write until ENOSPC test
------------------------------
done