#!/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