From: Artem Blagodarenko <artem.blagodarenko@xxxxxxxxx> e2image in modes without data blocks copy (-r, -Q) doesn't copy mmp block that leads to fsck error: Superblock has invalid MMP magic. Fix? no This patch adds coping this block if mmp is enabled. Change-Id: I66035ee394a0ff53b9959e82b3e47050f3bf1593 Signed-off-by: Artem Blagodarenko <artem.blagodarenko@xxxxxxxxx> --- misc/e2image.c | 8 ++++++++ tests/m_image_mmp/expect.1 | 7 +++++++ tests/m_image_mmp/name | 1 + tests/m_image_mmp/script | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 49 insertions(+) create mode 100644 tests/m_image_mmp/expect.1 create mode 100644 tests/m_image_mmp/name create mode 100644 tests/m_image_mmp/script diff --git a/misc/e2image.c b/misc/e2image.c index 6b4b23ce..e40da173 100644 --- a/misc/e2image.c +++ b/misc/e2image.c @@ -424,6 +424,14 @@ static void mark_table_blocks(ext2_filsys fs) } meta_blocks_count += fs->desc_blocks; + /* + * Mark MMP block + */ + if (fs->super->s_feature_incompat & EXT4_FEATURE_INCOMPAT_MMP) { + ext2fs_mark_block_bitmap2(meta_block_map, fs->super->s_mmp_block); + meta_blocks_count++; + } + for (i = 0; i < fs->group_desc_count; i++) { /* * Mark the blocks used for the inode table diff --git a/tests/m_image_mmp/expect.1 b/tests/m_image_mmp/expect.1 new file mode 100644 index 00000000..66300025 --- /dev/null +++ b/tests/m_image_mmp/expect.1 @@ -0,0 +1,7 @@ +Pass 1: Checking inodes, blocks, and sizes +Pass 2: Checking directory structure +Pass 3: Checking directory connectivity +Pass 4: Checking reference counts +Pass 5: Checking group summary information +test_filesys: 11/64 files (0.0% non-contiguous), 13/100 blocks +Exit status is 0 diff --git a/tests/m_image_mmp/name b/tests/m_image_mmp/name new file mode 100644 index 00000000..1015c348 --- /dev/null +++ b/tests/m_image_mmp/name @@ -0,0 +1 @@ +create image for partition with enabled mmp and execute fsck on image diff --git a/tests/m_image_mmp/script b/tests/m_image_mmp/script new file mode 100644 index 00000000..43e39044 --- /dev/null +++ b/tests/m_image_mmp/script @@ -0,0 +1,33 @@ +# use current directory instead of /tmp becase tmpfs doesn't support DIO +rm -f $TMPFILE +TMPFILE=$(mktemp ./tmp-$test_name.XXXXXX) + +stat -f $TMPFILE | grep -q "Type: tmpfs" +if [ $? = 0 ]; then + rm -f $TMPFILE + echo "$test_name: $test_description: skipped for tmpfs (no O_DIRECT)" + return 0 +fi + +$MKE2FS -q -F -o Linux -b 4096 -O mmp -E mmp_update_interval=1 $TMPFILE 100 >> $test_name.log 2>&1 +status=$? +if [ "$status" != 0 ] ; then + echo "mke2fs -O mmp failed" > $test_name.failed + echo "$test_name: $test_description: failed" + return $status +fi + +if test -x $E2IMAGE_EXE; then + +ONE_PASS_ONLY=true +FSCK_OPT="-n -f" +IMAGE=$TMPFILE +SKIP_GUNZIP=true +PREP_CMD="$E2IMAGE_EXE -r $TMPFILE $TMPFILE.raw; \ + mv $TMPFILE.raw $TMPFILE" + +. $cmd_dir/run_e2fsck + +else + echo "$test_name: $test_description: skipped" +fi -- 2.14.3