#!/bin/bash
IMG=../test.img
TMP=/tmp/res
XFSTESTS=~/xfstests
TESTS="4 5 8 11 16 25 32 55 64"
TARGET=./testdir
MNT=/mnt/resize
mkdir $TARGET 2>/dev/null
mkdir $MNT 2>/dev/null
umount $TARGET
umount $MNT
_check_out()
{
if [ $1 -ne 0 ]; then
grep ASSERT $TMP
echo FAIL RETURN $1
exit
fi
}
_get_sec()
{
echo $(($1*1024*1024*1024/512))
}
_mkfs()
{
echo "========== Initialize $1 GB ============"
mkfs.f2fs $IMG `_get_sec $1` | grep sectors
}
_mount()
{
echo "========== mount to $1 ================="
mount -t f2fs -o loop,discard,inline_data,inline_xattr $IMG $1 2>&1
_check_out $?
}
_fsck()
{
echo "========== fsck.f2fs ==================="
fsck.f2fs $IMG -t 2>&1 >$TMP
_check_out $?
grep FSCK $TMP
}
_fsstress()
{
echo "========== fsstress $1 ================="
$XFSTESTS/ltp/fsstress -x "echo 3 > /proc/sys/vm/drop_caches && sleep 1" -X 1 -r -f fsync=8 -f sync=0 -f write=8 -f dwrite=2 -f truncate=6 -f allocsp=0 -f bulkstat=0 -f bulkstat1=0 -f freesp=0 -f zero=1 -f collapse=1 -f insert=1 -f resvsp=0 -f unresvsp=0 -S t -p 10 -n $2 -d $1 >/dev/null
}
_resize()
{
echo "========== resize.f2fs $1 GB ==========="
resize.f2fs -t `_get_sec $1` $IMG 2>&1 >$TMP
_check_out $?
_fsck
}
_resize_tests()
{
for i in $TESTS
do
if [ $i -ge $1 ]; then
_resize $i
fi
done
}
_sload()
{
echo "========== sload $1 ===================="
sload.f2fs -f $1 $IMG 2>&1
_check_out $?
}
from_mount()
{
echo ""
echo " **** $1 GB to $2 GB with $3 *** "
_mkfs $1
_mount $3
_fsstress $3 10000
umount $3
_fsck
_resize_tests $2
}
from_sload()
{
echo ""
echo " **** $1 GB to $2 GB with $3 *** "
_mkfs $1
_sload $3
_fsck
_mount $MNT
_fsstress $MNT 10000
umount $MNT
_fsck
_resize_tests $2
_mount $MNT
_fsstress $MNT 10000
umount $MNT
_fsck
}
test_all()
{
for i in $TESTS
do
for j in $TESTS
do
if [ $i -lt $j ]; then
$1 $i $j $2
fi
done
done
}
test_all from_sload ~/grub
rm -rf $TARGET/*
_fsstress $TARGET 5000
test_all from_sload $TARGET
rm -rf $TARGET 2>/dev/null
test_all from_mount $MNT