#!/bin/bash
################################################################################
# #
# Copyright (c) 2009 FUJITSU LIMITED #
# #
# 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; either version 2 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will 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 to the Free Software #
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA #
# #
################################################################################
export TCID="ext4-delalloc-mballoc"
export TST_TOTAL=17
. ext4_funcs.sh
# Case 17: mount ext4 partition to ext3
ext4_test_remount()
{
mkfs.ext3 -I 256 -b 1024 $EXT4_DEV >/dev/null 2>&1
if [ $? -ne 0 ]; then
tst_resm TFAIL "failed to create ext4 filesystem"
return
fi
mount -t ext4 -o delalloc,auto_da_alloc $EXT4_DEV mnt_point
if [ $? -ne 0 ]; then
tst_resm TFAIL "failed to mount ext4 filesystem"
return
fi
ffsb $LTPROOT/testcases/data/ext4-ffsb/ffsb-config0 > /dev/null
if [ $? -ne 0 ]; then
tst_resm TFAIL "ffsb returned failure"
umount mnt_point
return
fi
umount mnt_point
if [ $? -ne 0 ]; then
tst_resm TFAIL "failed to umount ext4 filesystem"
return
fi
mount -t ext3 $EXT4_DEV mnt_point
if [ $? -ne 0 ]; then
tst_resm TFAIL "failed to mount to ext3"
return
fi
umount mnt_point
fsck -p $EXT4_DEV >/dev/null 2>&1
if [ $? -ne 0 ]; then
tst_resm TFAIL "fsck returned failure"
return
fi
tst_resm TPASS "remount test pass"
}
# Case 1-16: Use ffsb to test mballoc and delalloc
# $1: delalloc or nodelalloc
# $2: 0 - indirect-io, 1 - direct-io
# $3: block size
# $4: auto_da_alloc
ext4_test_delalloc_mballoc()
{
tst_resm TINFO "isDelalloc: $1, isDirectIO: $2, Blocksize: $3, isAuto_da_alloc: $4"
mkfs.ext4 -I 256 -b $3 /$EXT4_DEV >/dev/null 2>&1
if [ $? -ne 0 ]; then
tst_resm TFAIL "failed to create ext4 filesystem"
return
fi
tune2fs -O extents $EXT4_DEV >/dev/null 2>&1
mount -t ext4 -o $1,$4 $EXT4_DEV mnt_point
if [ $? -ne 0 ]; then
tst_resm TFAIL "failed to mount ext4 filesystem"
return
fi
ffsb $LTPROOT/testcases/data/ext4-ffsb/ffsb-config$2 > /dev/null
if [ $? -ne 0 ]; then
tst_resm TFAIL "ffsb returned failure"
umount mnt_point
return
fi
umount mnt_point
if [ $? -ne 0 ]; then
tst_resm TFAIL "failed to umount ext4 filesystem"
return
fi
fsck -p $EXT4_DEV >/dev/null 2>&1
if [ $? -ne 0 ]; then
tst_resm TFAIL "fsck returned failure"
return
fi
tst_resm TPASS "delalloc/mballoc test pass"
}
# main
ext4_setup
tst_test_cmds ffsb
DELALLOC=( "delalloc" "nodelalloc" )
DIRECT_IO=( 0 1 )
BLOCK_SIZE=( 1024 4096 )
BLOCK_AUTO_DA_ALLOC=( "auto_da_alloc=1" "noauto_da_alloc" )
for ((i = 0; i < 2; i++))
{
for ((j = 0; j < 2; j++))
{
for ((k = 0; k < 2; k++))
{
for ((l = 0; l < 2; l++))
{
ext4_test_delalloc_mballoc ${DELALLOC[$k]} \
${DIRECT_IO[$j]} \
${BLOCK_SIZE[$i]} \
${BLOCK_AUTO_DA_ALLOC[$l]}
}
}
}
}
ext4_test_remount
tst_exit