1#!/bin/sh 2 3# old distros are missing "truncate", emulate it with "dd" if necessary 4do_truncate() 5{ 6 [ "$1" = "-s" ] && size=$2 && shift 2 7 8 if ! truncate -s $size $1 >> $LOG 2>&1 ; then 9 dd if=/dev/zero of=$1 bs=1 count=0 seek=$size >> $LOG 2>&1 10 fi 11} 12 13resize_test () { 14DBG_FLAGS=63 15 16echo $test_description starting > $LOG 17rm -f $TMPFILE 18touch $TMPFILE 19 20# Verify that the $TMP filesystem handles $SIZE_2 sparse files. 21# If that fails, try the local filesystem instead. 22if do_truncate -s $SIZE_2 $TMPFILE 2> /dev/null; then 23 echo "using $TMPFILE" >> $LOG 24else 25 rm $TMPFILE 26 export TMPFILE=$(mktemp ./$test_name.tmp.XXXXXX) 27 touch $TMPFILE 28 echo "using $TMPFILE" >> $LOG 29 if ! do_truncate -s $SIZE_2 $TMPFILE >> $LOG 2>&1; then 30 rm $TMPFILE 31 return 111 32 fi 33fi 34> $TMPFILE 35 36echo $MKE2FS $FEATURES -qF $TMPFILE $SIZE_1 >> $LOG 37$MKE2FS $FEATURES -qF $TMPFILE $SIZE_1 >> $LOG 38 39OUT_TMP=$(mktemp ${TMPDIR:-/tmp}/csum-tmp.XXXXXX) 40 41date > $OUT_TMP 42cat $E2FSCK >> $OUT_TMP 43echo $CRCSUM $OUT_TMP >> $LOG 2>&1 44CSUM_1=$($CRCSUM $OUT_TMP) 45echo Checksum is $CSUM_1 >> $LOG 46 47echo Setting up file system >> $LOG 48$DEBUGFS -w $TMPFILE >> $LOG 2>&1 << EOF 49mkdir test 50cd test 51write $OUT_TMP e2fsck 52ls /test 53stat /test/e2fsck 54quit 55EOF 56echo " " >> $LOG 57 58rm -f $OUT_TMP 59 60echo $FSCK -fy $TMPFILE >> $LOG 2>&1 61$FSCK -fy $TMPFILE >> $LOG 2>&1 62 63chmod u-w $TMPFILE 64echo $RESIZE2FS -P $TMPFILE >> $LOG 2>&1 65if ! $RESIZE2FS -P $TMPFILE >> $LOG 2>&1 66then 67 return 1 68fi 69chmod u+w $TMPFILE 70 71echo $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS $TMPFILE $SIZE_2 >> $LOG 2>&1 72if ! $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS $TMPFILE $SIZE_2 >> $LOG 2>&1 73then 74 return 1 75fi 76 77echo $FSCK -fy $TMPFILE >> $LOG 2>&1 78if ! $FSCK -fy $TMPFILE >> $LOG 2>&1 79then 80 $DUMPE2FS $TMPFILE >> $LOG 81 return 1 82fi 83 84echo $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1 85$DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1 86 87echo $CRCSUM $OUT_TMP >> $LOG 2>&1 88CSUM_2=$($CRCSUM $OUT_TMP) 89echo Checksum is $CSUM_2 >> $LOG 90 91if test "$CSUM_1" != "$CSUM_2" 92then 93 return 1 94fi 95 96# Uncomment to grab extra debugging image 97# 98#mv $TMPFILE /tmp/foo.img 99#return 0 100 101echo $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS -M $TMPFILE $SIZE_2 >> $LOG 2>&1 102if ! $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS -M $TMPFILE $SIZE_2 >> $LOG 2>&1 103then 104 return 1 105fi 106 107echo $FSCK -fy $TMPFILE >> $LOG 2>&1 108if ! $FSCK -fy $TMPFILE >> $LOG 2>&1 109then 110 $DUMPE2FS $TMPFILE >> $LOG 111 return 1 112fi 113 114echo $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1 115$DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1 116 117echo $CRCSUM $OUT_TMP >> $LOG 2>&1 118CSUM_2=$($CRCSUM $OUT_TMP) 119echo Checksum is $CSUM_2 >> $LOG 120 121if test "$CSUM_1" != "$CSUM_2" 122then 123 return 1 124fi 125 126echo $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS -M $TMPFILE $SIZE_2 >> $LOG 2>&1 127if ! $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS -M $TMPFILE $SIZE_2 >> $LOG 2>&1 128then 129 return 1 130fi 131 132echo $FSCK -fy $TMPFILE >> $LOG 2>&1 133if ! $FSCK -fy $TMPFILE >> $LOG 2>&1 134then 135 $DUMPE2FS $TMPFILE >> $LOG 136 return 1 137fi 138 139echo $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1 140$DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1 141 142echo $CRCSUM $OUT_TMP >> $LOG 2>&1 143CSUM_2=$($CRCSUM $OUT_TMP) 144echo Checksum is $CSUM_2 >> $LOG 145 146if test "$CSUM_1" != "$CSUM_2" 147then 148 return 1 149fi 150 151echo $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS -M $TMPFILE $SIZE_2 >> $LOG 2>&1 152if ! $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS -M $TMPFILE $SIZE_2 >> $LOG 2>&1 153then 154 return 1 155fi 156 157echo $FSCK -fy $TMPFILE >> $LOG 2>&1 158if ! $FSCK -fy $TMPFILE >> $LOG 2>&1 159then 160 $DUMPE2FS $TMPFILE >> $LOG 161 return 1 162fi 163 164echo $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1 165$DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1 166 167echo $CRCSUM $OUT_TMP >> $LOG 2>&1 168CSUM_2=$($CRCSUM $OUT_TMP) 169echo Checksum is $CSUM_2 >> $LOG 170 171rm $OUT_TMP 172unset OUT_TMP 173 174rm -f $TMPFILE 175 176if test "$CSUM_1" != "$CSUM_2" 177then 178 return 1 179fi 180 181return 0 182 183} 184