OSDN Git Service

dumpe2fs: display external journal feature flags
authorDarrick J. Wong <darrick.wong@oracle.com>
Mon, 8 Sep 2014 23:12:28 +0000 (16:12 -0700)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 11 Sep 2014 16:40:55 +0000 (12:40 -0400)
Display the feature flags of an external journal.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reported-by: TR Reardon <thomas_reardon@hotmail.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
misc/dumpe2fs.c
tests/j_ext_dumpe2fs/expect [new file with mode: 0644]
tests/j_ext_dumpe2fs/image.gz [new file with mode: 0644]
tests/j_ext_dumpe2fs/name [new file with mode: 0644]
tests/j_ext_dumpe2fs/script [new file with mode: 0644]

index 25dce9c..4c7bf46 100644 (file)
@@ -433,8 +433,9 @@ static void print_journal_information(ext2_filsys fs)
        errcode_t       retval;
        char            buf[1024];
        char            str[80];
-       unsigned int    i;
+       unsigned int    i, j, printed = 0;
        journal_superblock_t    *jsb;
+       __u32                   *mask_ptr, mask, m;
 
        /* Get the journal superblock */
        if ((retval = io_channel_read_blk64(fs->io,
@@ -465,6 +466,17 @@ static void print_journal_information(ext2_filsys fs)
                       journal_checksum_type_str(jsb->s_checksum_type),
                       ext2fs_be32_to_cpu(jsb->s_checksum));
 
+       printf("%s", _("Journal features:        "));
+       for (i = 0, mask_ptr = &jsb->s_feature_compat; i < 3; i++, mask_ptr++) {
+               mask = be32_to_cpu(*mask_ptr);
+               for (j = 0, m = 1; j < 32; j++, m <<= 1) {
+                       if (mask & m) {
+                               printf(" %s", e2p_jrnl_feature2string(i, m));
+                               printed++;
+                       }
+               }
+       }
+
        printf(_("\nJournal block size:       %u\n"
                 "Journal length:           %u\n"
                 "Journal first block:      %u\n"
diff --git a/tests/j_ext_dumpe2fs/expect b/tests/j_ext_dumpe2fs/expect
new file mode 100644 (file)
index 0000000..c75f74c
--- /dev/null
@@ -0,0 +1,55 @@
+e2fsck external journal
+../e2fsck/e2fsck: Filesystem has unsupported feature(s) while trying to open test.img
+
+The superblock could not be read or does not describe a valid ext2/ext3/ext4
+filesystem.  If the device is valid and it really contains an ext2/ext3/ext4
+filesystem (and not swap or ufs or something else), then the superblock
+is corrupt, and you might try running e2fsck with an alternate superblock:
+    e2fsck -b 8193 <device>
+ or
+    e2fsck -b 32768 <device>
+
+Exit status is 8
+dumpe2fs external journal
+Filesystem volume name:   <none>
+Last mounted on:          <not available>
+Filesystem magic number:  0xEF53
+Filesystem revision #:    1 (dynamic)
+Filesystem features:      journal_dev metadata_csum
+Default mount options:    user_xattr acl block_validity
+Filesystem state:         clean
+Errors behavior:          Continue
+Filesystem OS type:       Linux
+Inode count:              0
+Block count:              2048
+Reserved block count:     0
+Free blocks:              0
+Free inodes:              0
+First block:              1
+Block size:               1024
+Fragment size:            1024
+Blocks per group:         8192
+Fragments per group:      8192
+Inodes per group:         0
+Inode blocks per group:   0
+Mount count:              0
+Check interval:           0 (<none>)
+Reserved blocks uid:      0
+Reserved blocks gid:      0
+First inode:              11
+Inode size:              256
+Required extra isize:     28
+Desired extra isize:      28
+Default directory hash:   half_md4
+Checksum type:            crc32c
+Checksum:                 0x3a9935ab
+Journal checksum type:    crc32c
+Journal checksum:         0x661e816f
+Journal features:         journal_64bit journal_checksum_v3
+Journal block size:       1024
+Journal length:           2048
+Journal first block:      3
+Journal sequence:         0x00000003
+Journal start:            0
+Journal number of users:  1
+Journal users:            117f752e-f27d-4f6f-a652-072586a29b82
diff --git a/tests/j_ext_dumpe2fs/image.gz b/tests/j_ext_dumpe2fs/image.gz
new file mode 100644 (file)
index 0000000..781b591
Binary files /dev/null and b/tests/j_ext_dumpe2fs/image.gz differ
diff --git a/tests/j_ext_dumpe2fs/name b/tests/j_ext_dumpe2fs/name
new file mode 100644 (file)
index 0000000..60d276c
--- /dev/null
@@ -0,0 +1 @@
+dumpe2fs of external journal device
diff --git a/tests/j_ext_dumpe2fs/script b/tests/j_ext_dumpe2fs/script
new file mode 100644 (file)
index 0000000..1611c45
--- /dev/null
@@ -0,0 +1,40 @@
+FSCK_OPT=-fy
+OUT=$test_name.log
+if [ -f $test_dir/expect.gz ]; then
+       EXP=$test_name.tmp
+       gunzip < $test_dir/expect.gz > $EXP1
+else
+       EXP=$test_dir/expect
+fi
+
+cp /dev/null $OUT
+
+gunzip < $test_dir/image.gz > $TMPFILE
+
+echo "e2fsck external journal" >> $OUT
+$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1
+status=$?
+echo Exit status is $status >> $OUT.new
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
+rm -f $OUT.new
+
+echo "dumpe2fs external journal" >> $OUT
+$DUMPE2FS $TMPFILE > $OUT.new 2>&1
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
+rm -f $OUT.new
+
+rm -f $TMPFILE
+
+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
+
+unset IMAGE FSCK_OPT OUT EXP