Files
apfstests/273
T
Tom Marek 1fce0780f6 273: fix of reading scratch size and removing lost+found
There were two reasons why test 273 was failing. Firstrly, when running on
ext4 fs it was removing everything from SCRATCH_MNT directory at the beginning
of tests including the lost+found directory. This caused error while checking
scratch fs after finishing test. Secondly, obtaining of the partition size was
not counting with with behaviour of df utility which may split the line containg
informations about one partition when it is too long thus it may have returned
nothing.

First problem was solved with removing all unnecessary rm -rf commands and the
second one was fixed with alternative awk script which is able to deal with
any line splitting possible. Also 'umount $SCRATCH_DEV' was substituted for
'_scratch_unmount'.

Cc: sandeen@sandeen.net
Signed-off-by: Tom Marek <tmarek@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
2012-05-15 10:48:47 -05:00

144 lines
2.7 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
owner=wu.bo@cn.fujitsu.com
seq=`basename $0`
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=1
_threads_set()
{
_cpu_num=`cat /proc/cpuinfo | grep "processor" | wc -l`
threads=$(($_cpu_num * 50))
if [ $threads -gt 200 ]
then
threads=200
fi
}
_file_create()
{
_i=0
if ! mkdir $SCRATCH_MNT/origin
then
echo "mkdir origin err"
status=1
exit
fi
cd $SCRATCH_MNT/origin
_disksize=`df --block-size=1 $SCRATCH_DEV | awk -v sd=$SCRATCH_DEV 'BEGIN{c=0}{for(i=1;i<=NF;++i){a[c]=$i;++c}}END{for(entry in a){if(a[entry] ~ sd){print a[entry + 3]; break}}}'`
_disksize=$(($_disksize / 3))
_num=$(($_disksize / $count / $threads / 4096))
_count=$count
while [ $_i -lt $_num ]
do
dd if=/dev/zero of=file_$_i bs=4096 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 >$seq.full 2>&1
if [ $? -ne 0 ]
then
echo "_porter $_suffix not complete"
fi
sync
}
_do_workload()
{
_pids=""
_pid=1
_threads_set
_file_create
_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 $seq.full
_scratch_unmount 2>/dev/null
_scratch_mkfs_sized $((2 * 1024 * 1024 * 1024)) >>$seq.full 2>&1
_scratch_mount
_do_workload
_check_scratch_fs
status=$?
exit