1#!/bin/bash 2 3################################################################################ 4# # 5# Copyright (c) 2009 FUJITSU LIMITED # 6# # 7# This program is free software; you can redistribute it and#or modify # 8# it under the terms of the GNU General Public License as published by # 9# the Free Software Foundation; either version 2 of the License, or # 10# (at your option) any later version. # 11# # 12# This program is distributed in the hope that it will be useful, but # 13# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # 14# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # 15# for more details. # 16# # 17# You should have received a copy of the GNU General Public License # 18# along with this program; if not, write to the Free Software # 19# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # 20# # 21################################################################################ 22 23export TCID="ext4-uninit-groups" 24export TST_TOTAL=24 25 26. ext4_funcs.sh 27 28# How to age filesystem 29EMPTY=1 30SMALL=2 31LARGE=3 32 33age_filesystem() 34{ 35 if [ $1 -eq $EMPTY ]; then 36 # aging, then del 37 ffsb ffsb-config3 > /dev/null 38 rm -rf mnt_point/* 39 elif [ $1 -eq $SMALL ]; then 40 # age filesystem from 0.0 to 0.2 -> 0.4 -> 0.6 -> 0.8 -> 1.0 41 for ((n = 3; n < 8; n++)) 42 { 43 ffsb ffsb-config$n > /dev/null 44 mv mnt_point/data mnt_point/data$n 45 } 46 elif [ $1 -eq $LARGE ]; then 47 rm -rf mnt_point/* 48 bsize=`dumpe2fs -h $EXT4_DEV 2> /dev/null | grep 'Block size'` 49 bsize=`echo $bsize | awk '{ print $3 }'` 50 bcount=`dumpe2fs -h $EXT4_DEV 2> /dev/null | grep 'Free blocks'` 51 bcount=`echo $bcount | awk '{ print $3 }'` 52 dd if=/dev/zero of=mnt_point/tmp_dir bs=$bsize count=$bcount 53 else 54 return 1 55 fi 56 57 return 0 58} 59 60# Test uninitialized groups 61# $1: orlov, oldalloc 62# $2: delalloc 63# $3: flex_bg 64# $4: age filesystem: $EMPTY, $SMALL, $LARGE 65ext4_test_uninit_groups() 66{ 67 echo "Test $TST_COUNT" >> ext4_uninit_groups_result.txt 68 69 mkfs.ext4 -I 256 -m 0 $EXT4_DEV >/dev/null 2>&1 70 if [ $? -ne 0 ]; then 71 tst_resm TFAIL "failed to create ext4 filesystem" 72 return 73 fi 74 75 if [ "$3" = "no_flex_bg" ]; then 76 flag="" 77 else 78 flag=$3 79 fi 80 81 tune2fs -O extents,uninit_groups,$flag $EXT4_DEV >/dev/null 2>&1 82 83 # Must run fsck after setting uninit_groups 84 fsck -p $EXT4_DEV >/dev/null 2>&1 85 86 mount -t ext4 -o $1,$2 $EXT4_DEV mnt_point 87 if [ $? -ne 0 ]; then 88 tst_resm TFAIL "failed to mount ext4 filesystem" 89 return 90 fi 91 92 age_filesystem $4 >> ext4_uninit_groups_result.txt 2>&1 93 if [ $? -ne 0 ]; then 94 tst_resm TFAIL "age filesystem failed" 95 umount mnt_point 96 return 97 fi 98 99 umount mnt_point 100 if [ $? -ne 0 ]; then 101 tst_resm TFAIL "failed to umount ext4 filesystem" 102 return 103 fi 104 105 fsck -p $EXT4_DEV >/dev/null 2>&1 106 if [ $? -ne 0 ]; then 107 tst_resm TFAIL "fsck returned failure" 108 return 109 fi 110 111 tst_resm TPASS "ext4 uninit groups test pass" 112} 113 114# main 115ext4_setup 116 117tst_test_cmds ffsb 118 119ORLOV=( "orlov" "oldalloc" ) 120DELALLOC=( "delalloc" "nodelalloc" ) 121FLEX_BG=( "flex_bg" "no_flex_bg" ) 122AGING=( $EMPTY $SMALL $LARGE ) 123 124 125for ((i = 0; i < 2; i++)) 126{ 127 for ((j = 0; j < 2; j++)) 128 { 129 for ((k = 0; k < 2; k++)) 130 { 131 for ((l = 0; l < 3; l++)) 132 { 133 ext4_test_uninit_groups ${ORLOV[$i]} \ 134 ${DELALLOC[$j]} \ 135 ${FLEX_BG[$k]} \ 136 ${AGING[$l]} 137 } 138 } 139 } 140} 141 142tst_exit 143