Files
apfstests/tests/generic/274
T
Eric Sandeen 96fce07867 xfstests: automatically add -F to xfs_io on non-xfs
The -F flag to xfs_io originally enabled it to operate on non-xfs
filesystems.  This restriction was removed upstream in favor of
gracefully failing on the handful of operations that actually
required xfs, and the option was deprecated.

However, xfstests is still used on distros with older xfsprogs, and
so "xfs_io -F" was necessary throughout xfstests.

Simplify this by appending -F to XFS_IO_PROG when it's needed -
i.e. if we're using old xfsprogs on a non-xfs filesystem.

This will eliminate errors when new tests leave out the -F, and
if and when -F is finally removed, there will be one central
location in xfstests to update.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Acked-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Rich Johnston <rjohnston@sgi.com>
Signed-off-by: Rich Johnston <rjohnston@sgi.com>
2013-05-14 08:33:44 -05:00

102 lines
3.1 KiB
Bash
Executable File

#! /bin/bash
# FS QA Test No. 274
#
# preallocation test:
# Preallocate space to a file, and fill the rest of the fs to 100%.
# Then test a write into that preallocated space, which should succeed.
#
#-----------------------------------------------------------------------
# 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
seq=`basename $0`
seqres=$RESULT_DIR/$seq
echo "QA output created by $seq"
here=`pwd`
tmp=/tmp/$$
status=0 # success is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15
_cleanup()
{
cd /
rm -f $tmp.*
_scratch_unmount
}
. ./common/rc
. ./common/filter
# real QA test starts here
_supported_fs generic
_supported_os IRIX Linux
_require_scratch
_require_xfs_io_falloc
echo "------------------------------"
echo "preallocation test"
echo "------------------------------"
rm -f $seqres.full
umount $SCRATCH_DEV 2>/dev/null
_scratch_mkfs_sized $((1 * 1024 * 1024 * 1024)) >>$seqres.full 2>&1
_scratch_mount
# Create a 4k file and Allocate 4M past EOF on that file
$XFS_IO_PROG -f -c "pwrite 0 4k" -c "falloc -k 4k 4m" $SCRATCH_MNT/test \
>>$seqres.full 2>&1 || _fail "failed to create test file"
# Fill the rest of the fs completely
# Note, this will show ENOSPC errors in $seqres.full, that's ok.
echo "Fill fs with 1M IOs; ENOSPC expected" >> $seqres.full
dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=1M >>$seqres.full 2>&1
echo "Fill fs with 4K IOs; ENOSPC expected" >> $seqres.full
dd if=/dev/zero of=$SCRATCH_MNT/tmp2 bs=4K >>$seqres.full 2>&1
sync
# Last effort, use O_SYNC
echo "Fill fs with 4K DIOs; ENOSPC expected" >> $seqres.full
dd if=/dev/zero of=$SCRATCH_MNT/tmp3 bs=4K oflag=sync >>$seqres.full 2>&1
# Save space usage info
echo "Post-fill space:" >> $seqres.full
df $SCRATCH_MNT >>$seqres.full 2>&1
# Now attempt a write into all of the preallocated space -
# in a very nasty way, badly fragmenting it and then filling it in.
echo "Fill in prealloc space; fragment at offsets:" >> $seqres.full
for i in `seq 1 2 1023`; do
echo -n "$i " >> $seqres.full
dd if=/dev/zero of=$SCRATCH_MNT/test seek=$i bs=4K count=1 conv=notrunc \
>>$seqres.full 2>/dev/null || _fail "failed to write to test file"
done
sync
echo >> $seqres.full
echo "Fill in prealloc space; fill holes at offsets:" >> $seqres.full
for i in `seq 2 2 1023`; do
echo -n "$i " >> $seqres.full
dd if=/dev/zero of=$SCRATCH_MNT/test seek=$i bs=4K count=1 conv=notrunc \
>>$seqres.full 2>/dev/null || _fail "failed to fill test file"
done
sync
echo >> $seqres.full
echo "done"
exit