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