From 7dd0dfca04b1bf3a683f5720f3ca9ead83b8a601 Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Tue, 19 Apr 2016 12:20:30 -0700 Subject: [PATCH] e2image: ignore checksum errors Since e2image is used to capture broken fs images for debugging, ignore checksum errors when creating the image. Signed-off-by: Darrick J. Wong Signed-off-by: Theodore Ts'o --- misc/e2image.c | 5 +++-- tests/filter.sed | 1 + tests/m_corrupt_e2image/expect | 11 +++++++++++ tests/m_corrupt_e2image/image.gz | Bin 0 -> 2606 bytes tests/m_corrupt_e2image/name | 1 + tests/m_corrupt_e2image/script | 26 ++++++++++++++++++++++++++ 6 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 tests/m_corrupt_e2image/expect create mode 100644 tests/m_corrupt_e2image/image.gz create mode 100644 tests/m_corrupt_e2image/name create mode 100644 tests/m_corrupt_e2image/script diff --git a/misc/e2image.c b/misc/e2image.c index 690ad2ce..e0c31883 100644 --- a/misc/e2image.c +++ b/misc/e2image.c @@ -1374,7 +1374,8 @@ static void install_image(char *device, char *image_fn, int type) { errcode_t retval; ext2_filsys fs; - int open_flag = EXT2_FLAG_IMAGE_FILE | EXT2_FLAG_64BITS; + int open_flag = EXT2_FLAG_IMAGE_FILE | EXT2_FLAG_64BITS | + EXT2_FLAG_IGNORE_CSUM_ERRORS; int fd = 0; io_manager io_ptr; io_channel io; @@ -1451,7 +1452,7 @@ int main (int argc, char ** argv) ext2_filsys fs; char *image_fn, offset_opt[64]; struct ext2_qcow2_hdr *header = NULL; - int open_flag = EXT2_FLAG_64BITS; + int open_flag = EXT2_FLAG_64BITS | EXT2_FLAG_IGNORE_CSUM_ERRORS; int img_type = 0; int flags = 0; int mount_flags = 0; diff --git a/tests/filter.sed b/tests/filter.sed index 4a630bfd..bec899ce 100644 --- a/tests/filter.sed +++ b/tests/filter.sed @@ -4,6 +4,7 @@ /^mke2fs [1-9]\.[0-9]*[.-][^ ]* ([0-9]*-[A-Za-z]*-[0-9]*)/d /^resize2fs [1-9]\.[0-9]*[.-][^ ]* ([0-9]*-[A-Za-z]*-[0-9]*)/d /^tune2fs [1-9]\.[0-9]*[.-][^ ]* ([0-9]*-[A-Za-z]*-[0-9]*)/d +/^e2image [1-9]\.[0-9]*[.-][^ ]* ([0-9]*-[A-Za-z]*-[0-9]*)/d s/\\015//g /automatically checked/d /^Directory Hash Seed:/d diff --git a/tests/m_corrupt_e2image/expect b/tests/m_corrupt_e2image/expect new file mode 100644 index 00000000..eeb967ff --- /dev/null +++ b/tests/m_corrupt_e2image/expect @@ -0,0 +1,11 @@ +Pass 1: Checking inodes, blocks, and sizes +Inode 12 passes checks, but checksum does not match inode. Fix? no + +Pass 2: Checking directory structure +Pass 3: Checking directory connectivity +Pass 4: Checking reference counts +Pass 5: Checking group summary information + +test_filesys.bin: ********** WARNING: Filesystem still has errors ********** + +test_filesys.bin: 12/128 files (0.0% non-contiguous), 19/512 blocks diff --git a/tests/m_corrupt_e2image/image.gz b/tests/m_corrupt_e2image/image.gz new file mode 100644 index 0000000000000000000000000000000000000000..e17e9216deac289cf5c13a33be87b1810640a66d GIT binary patch literal 2606 zcmb2|=3wyobSapL`Ry(14Bh7a#A{ZQZy>*8x|QnKm@V3(D-?OG_n)#_yJ!7jME zccFxPCX1kBt6$TLWsAF;`vY|rJyPTFYwCAAxQJ1dedE2Sil)~bqkGT(t$SEM{r$V5 z^84lefA)JjF&#ou0{Bmr4M&rwy6_4VU%juSV`?OqhEd#^L$xHU%EzDW< z?ElgobJqIRTYdVPt0{6lLy>`jA>!Y&Pd7g-O%|Nb4&?o-KKcItPl425PH*=!{G4#| z%h#*_4)4}`VkCStd1)?t_wjx?k7unP7OYm*66uzk1JrTANZ|X^`FE>t1i#FA^?(1n zRbT%zGB7lJd+|SCBD&hV^8Z5bYM?TQ-QWIe?>@c^EbH)J9w?O2|IZ#sfxw16qFqPl zgh4nsNrku1cFj5klyeZLW0GZ$0}^eC_)0ZyanQqF4VdL)|HA^P`SDl!%e $TMPFILE +$E2IMAGE -r $TMPFILE $TMPFILE.bin >> $OUT 2>&1 +$FSCK -fn $TMPFILE.bin >> $OUT 2>&1 + +sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test_filesys;" $OUT > $OUT.new +mv $OUT.new $OUT + +cmp -s $OUT $EXP +status=$? +if [ "$status" = 0 ] ; then + echo "$test_name: $test_description: ok" + touch $test_name.ok +else + echo "$test_name: $test_description: failed" + diff $DIFF_OPTS $EXP $OUT > $test_name.failed + rm -f $test_name.tmp +fi + +rm -rf $OUT $TMPFILE $TMPFILE.bin $TMPFILE.test +unset IMAGE FSCK_OPT OUT EXP