mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
9cafe2a12d
The space occupied by files in the 'origin' directory is calculated with the assumption that 4k is the block size of the underlying filesystem. This causes the test to fail with ENOSPC errors when running on filesystems with larger block sizes. To fix the issue, this commit makes use of the the block size obtained from the mounted filesystem. Signed-off-by: Chandan Rajendra <chandan@linux.vnet.ibm.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
145 lines
2.6 KiB
Bash
Executable File
145 lines
2.6 KiB
Bash
Executable File
#! /bin/bash
|
|
# FS QA Test No. 273
|
|
#
|
|
# reservation test with heavy cp workload
|
|
#
|
|
#-----------------------------------------------------------------------
|
|
# 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 -rf $tmp.*
|
|
_scratch_unmount
|
|
}
|
|
|
|
. ./common/rc
|
|
. ./common/filter
|
|
|
|
threads=50
|
|
count=2
|
|
|
|
_threads_set()
|
|
{
|
|
_cpu_num=`$here/src/feature -o`
|
|
threads=$(($_cpu_num * 50))
|
|
if [ $threads -gt 200 ]
|
|
then
|
|
threads=200
|
|
fi
|
|
}
|
|
|
|
_file_create()
|
|
{
|
|
block_size=$1
|
|
_i=0
|
|
|
|
if ! mkdir $SCRATCH_MNT/origin
|
|
then
|
|
echo "mkdir origin err"
|
|
status=1
|
|
exit
|
|
fi
|
|
|
|
cd $SCRATCH_MNT/origin
|
|
|
|
_disksize=`$DF_PROG -B 1 $SCRATCH_MNT | tail -1 | $AWK_PROG '{ print $5 }'`
|
|
_disksize=$(($_disksize / 3))
|
|
_num=$(($_disksize / $count / $threads / $block_size))
|
|
_count=$count
|
|
while [ $_i -lt $_num ]
|
|
do
|
|
dd if=/dev/zero of=file_$_i bs=$block_size count=$_count >/dev/null 2>&1
|
|
_i=$(($_i + 1))
|
|
done
|
|
|
|
cd $here
|
|
}
|
|
|
|
_porter()
|
|
{
|
|
_suffix=$1
|
|
|
|
if ! mkdir $SCRATCH_MNT/sub_$_suffix
|
|
then
|
|
echo "mkdir sub_xxx err"
|
|
status=1
|
|
exit
|
|
fi
|
|
|
|
cp -r $SCRATCH_MNT/origin $SCRATCH_MNT/sub_$_suffix >>$seqres.full 2>&1
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo "_porter $_suffix not complete"
|
|
fi
|
|
|
|
sync
|
|
}
|
|
|
|
_do_workload()
|
|
{
|
|
_pids=""
|
|
_pid=1
|
|
block_size=$(get_block_size $SCRATCH_MNT)
|
|
|
|
_threads_set
|
|
_file_create $block_size
|
|
|
|
_threads=$threads
|
|
|
|
while [ $_pid -lt $_threads ]
|
|
do
|
|
_porter $_pid &
|
|
_pids="$_pids $!"
|
|
_pid=$(($_pid + 1))
|
|
done
|
|
|
|
wait $_pids
|
|
}
|
|
|
|
# real QA test starts here
|
|
_supported_fs generic
|
|
_supported_os IRIX Linux
|
|
_require_scratch
|
|
|
|
echo "------------------------------"
|
|
echo "start the workload"
|
|
echo "------------------------------"
|
|
|
|
rm -f $seqres.full
|
|
|
|
_scratch_unmount 2>/dev/null
|
|
_scratch_mkfs_sized $((2 * 1024 * 1024 * 1024)) >>$seqres.full 2>&1
|
|
_scratch_mount
|
|
|
|
_do_workload
|
|
|
|
status=0
|
|
exit
|