mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
e48ba4f74a
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>
96 lines
2.7 KiB
Bash
Executable File
96 lines
2.7 KiB
Bash
Executable File
#! /bin/bash
|
|
# FS QA Test No. 275
|
|
#
|
|
# 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.
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License as
|
|
# published by the Free Software Foundation.
|
|
#
|
|
# This program is distributed in the hope that it would be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write the Free Software Foundation,
|
|
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
#
|
|
#-----------------------------------------------------------------------
|
|
#
|
|
#creator
|
|
owner=wu.bo@cn.fujitsu.com
|
|
|
|
seq=`basename $0`
|
|
echo "QA output created by $seq"
|
|
|
|
here=`pwd`
|
|
tmp=/tmp/$$
|
|
status=1 # failure is the default!
|
|
trap "_cleanup; exit \$status" 0 1 2 3 15
|
|
|
|
_cleanup()
|
|
{
|
|
cd /
|
|
_scratch_unmount
|
|
}
|
|
|
|
. ./common.rc
|
|
. ./common.filter
|
|
|
|
# real QA test starts here
|
|
_supported_fs generic
|
|
_supported_os IRIX Linux
|
|
_require_scratch
|
|
|
|
echo "------------------------------"
|
|
echo "write until ENOSPC test"
|
|
echo "------------------------------"
|
|
|
|
rm -f $seq.full
|
|
|
|
umount $SCRATCH_DEV 2>/dev/null
|
|
_scratch_mkfs_sized $((2 * 1024 * 1024 * 1024)) >>$seq.full 2>&1
|
|
_scratch_mount
|
|
|
|
rm -rf $SCRATCH_MNT/*
|
|
|
|
dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=256K count=1 >>$seq.full 2>&1
|
|
[ $? -ne 0 ] && _fail "Error creating file"
|
|
|
|
# Attempt to completely fill fs
|
|
dd if=/dev/zero of=$SCRATCH_MNT/tmp2 bs=1M >>$seq.full 2>&1
|
|
sync
|
|
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
|
|
|
|
# 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
|