| #!/bin/sh | |
| # old distros are missing "truncate", emulate it with "dd" | |
| truncate() | |
| { | |
| [ "$1" = "-s" ] && size=$2 && shift 2 | |
| dd if=/dev/zero of=$1 bs=1 count=0 seek=$size >> $LOG 2>&1 | |
| } | |
| resize_test () { | |
| DBG_FLAGS=63 | |
| echo $test_description starting > $LOG | |
| rm -f $TMPFILE | |
| touch $TMPFILE | |
| # Verify that the $TMP filesystem handles $SIZE_2 sparse files. | |
| # If that fails, try the local filesystem instead. | |
| if truncate -s $SIZE_2 $TMPFILE 2> /dev/null; then | |
| echo "using $TMPFILE" >> $LOG | |
| else | |
| rm $TMPFILE | |
| export TMPFILE=$(mktemp ./$test_name.tmp.XXXXXX) | |
| touch $TMPFILE | |
| echo "using $TMPFILE" >> $LOG | |
| if ! truncate -s $SIZE_2 $TMPFILE >> $LOG 2>&1; then | |
| rm $TMPFILE | |
| return 111 | |
| fi | |
| fi | |
| > $TMPFILE | |
| echo $MKE2FS $FEATURES -qF $TMPFILE $SIZE_1 >> $LOG | |
| $MKE2FS $FEATURES -qF $TMPFILE $SIZE_1 >> $LOG | |
| OUT_TMP=$(mktemp ${TMPDIR:-/tmp}/csum-tmp.XXXXXX) | |
| date > $OUT_TMP | |
| cat $E2FSCK >> $OUT_TMP | |
| echo $CRCSUM $OUT_TMP >> $LOG 2>&1 | |
| CSUM_1=$($CRCSUM $OUT_TMP) | |
| echo Checksum is $CSUM_1 >> $LOG | |
| echo Setting up file system >> $LOG | |
| $DEBUGFS -w $TMPFILE >> $LOG 2>&1 << EOF | |
| mkdir test | |
| cd test | |
| write $OUT_TMP e2fsck | |
| ls /test | |
| stat /test/e2fsck | |
| quit | |
| EOF | |
| echo " " >> $LOG | |
| rm -f $OUT_TMP | |
| echo $FSCK -fy $TMPFILE >> $LOG 2>&1 | |
| $FSCK -fy $TMPFILE >> $LOG 2>&1 | |
| echo $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS $TMPFILE $SIZE_2 >> $LOG 2>&1 | |
| if ! $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS $TMPFILE $SIZE_2 >> $LOG 2>&1 | |
| then | |
| return 1 | |
| fi | |
| echo $FSCK -fy $TMPFILE >> $LOG 2>&1 | |
| if ! $FSCK -fy $TMPFILE >> $LOG 2>&1 | |
| then | |
| dumpe2fs $TMPFILE >> $LOG | |
| return 1 | |
| fi | |
| echo $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1 | |
| $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1 | |
| echo $CRCSUM $OUT_TMP >> $LOG 2>&1 | |
| CSUM_2=$($CRCSUM $OUT_TMP) | |
| echo Checksum is $CSUM_2 >> $LOG | |
| if test "$CSUM_1" != "$CSUM_2" | |
| then | |
| return 1 | |
| fi | |
| # Uncomment to grab extra debugging image | |
| # | |
| #mv $TMPFILE /tmp/foo.img | |
| #return 0 | |
| echo $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS -M $TMPFILE $SIZE_2 >> $LOG 2>&1 | |
| if ! $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS -M $TMPFILE $SIZE_2 >> $LOG 2>&1 | |
| then | |
| return 1 | |
| fi | |
| echo $FSCK -fy $TMPFILE >> $LOG 2>&1 | |
| if ! $FSCK -fy $TMPFILE >> $LOG 2>&1 | |
| then | |
| dumpe2fs $TMPFILE >> $LOG | |
| return 1 | |
| fi | |
| echo $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1 | |
| $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1 | |
| echo $CRCSUM $OUT_TMP >> $LOG 2>&1 | |
| CSUM_2=$($CRCSUM $OUT_TMP) | |
| echo Checksum is $CSUM_2 >> $LOG | |
| if test "$CSUM_1" != "$CSUM_2" | |
| then | |
| return 1 | |
| fi | |
| echo $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS -M $TMPFILE $SIZE_2 >> $LOG 2>&1 | |
| if ! $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS -M $TMPFILE $SIZE_2 >> $LOG 2>&1 | |
| then | |
| return 1 | |
| fi | |
| echo $FSCK -fy $TMPFILE >> $LOG 2>&1 | |
| if ! $FSCK -fy $TMPFILE >> $LOG 2>&1 | |
| then | |
| dumpe2fs $TMPFILE >> $LOG | |
| return 1 | |
| fi | |
| echo $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1 | |
| $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1 | |
| echo $CRCSUM $OUT_TMP >> $LOG 2>&1 | |
| CSUM_2=$($CRCSUM $OUT_TMP) | |
| echo Checksum is $CSUM_2 >> $LOG | |
| if test "$CSUM_1" != "$CSUM_2" | |
| then | |
| return 1 | |
| fi | |
| echo $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS -M $TMPFILE $SIZE_2 >> $LOG 2>&1 | |
| if ! $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS -M $TMPFILE $SIZE_2 >> $LOG 2>&1 | |
| then | |
| return 1 | |
| fi | |
| echo $FSCK -fy $TMPFILE >> $LOG 2>&1 | |
| if ! $FSCK -fy $TMPFILE >> $LOG 2>&1 | |
| then | |
| dumpe2fs $TMPFILE >> $LOG | |
| return 1 | |
| fi | |
| echo $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1 | |
| $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1 | |
| echo $CRCSUM $OUT_TMP >> $LOG 2>&1 | |
| CSUM_2=$($CRCSUM $OUT_TMP) | |
| echo Checksum is $CSUM_2 >> $LOG | |
| rm $OUT_TMP | |
| unset OUT_TMP | |
| if test "$CSUM_1" != "$CSUM_2" | |
| then | |
| return 1 | |
| fi | |
| rm $TMPFILE | |
| return 0 | |
| } |