Message ID | 20180821135044.60596-1-c17828@cray.com |
---|---|
State | New, archived |
Headers | show |
Series | e2image: copy mmp block when create metadata only image | expand |
On Tue, Aug 21, 2018 at 04:50:44PM +0300, c17828 wrote: > From: Artem Blagodarenko <artem.blagodarenko@gmail.com> > > 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@gmail.com> You need to override the location of the temporary file used by the test, because mmp uses O_DIRECT, and O_DIRECT doesn't work on tmpfs. Hence the new test you added (thanks for adding a regression test) fails on developers' systems which have a tmpfs mounted on /tmp: % mke2fs -q -F -o Linux -b 4096 -O mmp -E mmp_update_interval=1 /tmp/foo.img 100 mke2fs: MMP: open with O_DIRECT failed while writing out and closing file system Take a look at how the test m_mmp_bad_csum handles this: # use current directory instead of /tmp becase tmpfs doesn't support DIO rm -f $TMPFILE TMPFILE=$(mktemp ./tmp-$test_name.XXXXXX) Could you fix and resend? Thanks! - Ted
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..6028408e --- /dev/null +++ b/tests/m_image_mmp/script @@ -0,0 +1,22 @@ +$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