Whamcloud - gitweb
e2image: copy mmp block when create metadata only image
authorArtem Blagodarenko <artem.blagodarenko@gmail.com>
Tue, 21 Aug 2018 19:58:41 +0000 (22:58 +0300)
committerTheodore Ts'o <tytso@mit.edu>
Wed, 22 Aug 2018 04:37:54 +0000 (00:37 -0400)
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>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
misc/e2image.c
tests/m_image_mmp/expect.1 [new file with mode: 0644]
tests/m_image_mmp/name [new file with mode: 0644]
tests/m_image_mmp/script [new file with mode: 0644]

index d32b84a..9e21d0d 100644 (file)
@@ -416,6 +416,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 (file)
index 0000000..6630002
--- /dev/null
@@ -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 (file)
index 0000000..1015c34
--- /dev/null
@@ -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 (file)
index 0000000..43e3904
--- /dev/null
@@ -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