1test_description="e2undo with the offset option (-o offset)" 2OUT="$test_name.log" 3TMPFILE2="${TMPFILE}_2" 4TDB_FILE="$TMPFILE.e2undo" 5 6E2UNDO_FEATURE_COMPAT_OFFSET=1 7 8trap "rm -f $TMPFILE2 $TDB_FILE" EXIT INT QUIT 9 10read_header_entry() { 11 # $2 is just used as a dummy - it is never used by e2undo 12 # when dumping the header 13 $E2UNDO -h "$1" "$2" | grep "^$3:" 14} 15 16read_header_offset() { 17 read_header_entry "$TDB_FILE" "$TMPFILE" "fs offset" | cut -f2 18} 19 20read_header_compat() { 21 read_header_entry "$TDB_FILE" "$TMPFILE" "compat" | cut -f3 22} 23 24e2undo_offset_assert() { 25 if [ "$crc_exp" != "$crc_act" -o \ 26 "$offset_exp" != "$offset_act" -o \ 27 $(($compat_act & $E2UNDO_FEATURE_COMPAT_OFFSET)) -ne $compat_exp ] 28 then 29 echo "$1" >> "$test_name.failed" 30 echo "crc_exp: $crc_exp" >> "$test_name.failed" 31 echo "crc_act: $crc_act" >> "$test_name.failed" 32 echo "offset_exp: $offset_exp" >> "$test_name.failed" 33 echo "offset_act: $offset_act" >> "$test_name.failed" 34 echo "compat_exp: $compat_exp" >> "$test_name.failed" 35 echo "compat_act: $compat_act" >> "$test_name.failed" 36 fi 37} 38 39init_fs() { 40 echo "#" >> "$OUT" 41 echo "# init fs for $1" >> "$OUT" 42 echo "#" >> "$OUT" 43 rm -f "$TDB_FILE" 44 dd if=/dev/zero of="$TMPFILE" bs=1k count=1024 > /dev/null 2>&1 45 $MKE2FS -F -z "$TDB_FILE" -b 1024 -E offset=524288 "$TMPFILE" 512 \ 46 >> "$OUT" 2>&1 47} 48 49# 50# test absence of the "-o N" option 51# 52test_e2undo_offset_no_option() { 53 init_fs "test_e2undo_offset_no_option" 54 55 $E2UNDO "$TDB_FILE" "$TMPFILE" >> "$OUT" 2>&1 56 57 crc_exp=`dd if=/dev/zero bs=1k count=1024 2>/dev/null | $CRCSUM` 58 crc_act=`$CRCSUM "$TMPFILE"` 59 offset_exp=524288 60 offset_act=`read_header_offset` 61 compat_exp=$E2UNDO_FEATURE_COMPAT_OFFSET 62 compat_act=`read_header_compat` 63 e2undo_offset_assert "test_e2undo_offset_no_option" 64} 65 66# 67# test removal of the offset feature in the undo header 68# 69test_e2undo_offset_no_option_remove_offset_header() { 70 init_fs "test_e2undo_offset_no_option_remove_offset_header" 71 dd if="$TMPFILE" of="$TMPFILE2" bs=1k count=512 skip=512 \ 72 > /dev/null 2>&1 73 # offset feature will be removed from the undo header 74 $TUNE2FS -z "$TDB_FILE" -C 42 "$TMPFILE2" >> "$OUT" 2>&1 75 76 $E2UNDO "$TDB_FILE" "$TMPFILE2" >> "$OUT" 2>&1 77 78 crc_exp=`dd if=/dev/zero bs=1k count=512 2>/dev/null | $CRCSUM` 79 crc_act=`$CRCSUM "$TMPFILE2"` 80 offset_exp= 81 offset_act=`read_header_offset` 82 compat_exp=0 83 compat_act=`read_header_compat` 84 e2undo_offset_assert "test_e2undo_offset_no_option_remove_offset_header" 85} 86 87# 88# test "-o 4096" 89# 90test_e2undo_offset_4096() { 91 init_fs "test_e2undo_offset_4096" 92 dd if=/dev/zero of="$TMPFILE2" bs=1k count=4 > /dev/null 2>&1 93 dd if="$TMPFILE" of="$TMPFILE2" bs=1k count=512 skip=512 seek=4 \ 94 > /dev/null 2>&1 95 96 $E2UNDO -o 4096 "$TDB_FILE" "$TMPFILE2" >> "$OUT" 2>&1 97 98 crc_exp=`dd if=/dev/zero bs=1k count=516 2>/dev/null | $CRCSUM` 99 crc_act=`$CRCSUM "$TMPFILE2"` 100 # the same as in test_e2undo_offset_no_option 101 offset_exp=524288 102 offset_act=`read_header_offset` 103 compat_exp=$E2UNDO_FEATURE_COMPAT_OFFSET 104 compat_act=`read_header_compat` 105 e2undo_offset_assert "test_e2undo_offset_4096" 106} 107 108# 109# test "-o 0" 110# 111test_e2undo_offset_0() { 112 init_fs "test_e2undo_offset_0" 113 dd if="$TMPFILE" of="$TMPFILE2" bs=1k count=512 skip=512 \ 114 > /dev/null 2>&1 115 116 $E2UNDO -o 0 "$TDB_FILE" "$TMPFILE2" >> "$OUT" 2>&1 117 118 crc_exp=`dd if=/dev/zero bs=1k count=512 2>/dev/null | $CRCSUM` 119 crc_act=`$CRCSUM "$TMPFILE2"` 120 # the same as in test_e2undo_offset_no_option 121 offset_exp=524288 122 offset_act=`read_header_offset` 123 compat_exp=$E2UNDO_FEATURE_COMPAT_OFFSET 124 compat_act=`read_header_compat` 125 e2undo_offset_assert "test_e2undo_offset_0" 126} 127 128test_e2undo_offset_no_option 129test_e2undo_offset_no_option_remove_offset_header 130test_e2undo_offset_4096 131test_e2undo_offset_0 132 133if [ -e "$test_name.failed" ]; then 134 echo "$test_name: $test_description: failed" 135else 136 echo "$test_name: $test_description: ok" 137 touch "$test_name.ok" 138fi 139