From 3727a0e745e426802f8e829ab2d47523f7c6de81 Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Mon, 8 Sep 2014 16:12:28 -0700 Subject: [PATCH] dumpe2fs: display external journal feature flags Display the feature flags of an external journal. Signed-off-by: Darrick J. Wong Reported-by: TR Reardon Signed-off-by: Theodore Ts'o --- misc/dumpe2fs.c | 14 ++++++++- tests/j_ext_dumpe2fs/expect | 55 ++++++++++++++++++++++++++++++++++ tests/j_ext_dumpe2fs/image.gz | Bin 0 -> 2963 bytes tests/j_ext_dumpe2fs/name | 1 + tests/j_ext_dumpe2fs/script | 40 +++++++++++++++++++++++++ 5 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 tests/j_ext_dumpe2fs/expect create mode 100644 tests/j_ext_dumpe2fs/image.gz create mode 100644 tests/j_ext_dumpe2fs/name create mode 100644 tests/j_ext_dumpe2fs/script diff --git a/misc/dumpe2fs.c b/misc/dumpe2fs.c index 25dce9c5c..4c7bf46f2 100644 --- a/misc/dumpe2fs.c +++ b/misc/dumpe2fs.c @@ -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 index 000000000..c75f74c2c --- /dev/null +++ b/tests/j_ext_dumpe2fs/expect @@ -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 + or + e2fsck -b 32768 + +Exit status is 8 +dumpe2fs external journal +Filesystem volume name: +Last mounted on: +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 () +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 index 0000000000000000000000000000000000000000..781b591c0f81778a4209096878b15bc0be99e04e GIT binary patch literal 2963 zc-rmA|5K6&0LO8+uH3ZYp>yhV5R193FXN^))|z^arOuYwF!D?4)pVL)W;+LBFrF?` z=GinexA}#fUTITlrvifC@YK}7Fm(Y62BIMXB1Hq#hv#|L?a$cp`sw}oU@Kqo*bsXq zzP!VtV*HqRCdBh8BU?%1bR~{s8Wu<=xyjrEX&}jXJT5mh7bwg09y%8nfXBAn!l5B_ ztS>rg0lNzwOHe4IYS6o&GYQe3Lh;(UUUTQB&R|kIQ9b zPt!%rYZTNY8(N)kkzYQ^zP=*V8e5-*q#%M1gH`N^$EUZck6jLncjH8X${~qn?A-B% zezSV=lF+xUwnLgh&sl?l2!zBGn|zLcP-pL>fX(nM^yS)%;FwWA)Zk0O?c()s;rm~; z2ZHLzUoVejU`=!=SUW#kH2XVLg;{E%CJWy_<;6YB^NFFg*Qs@Po-cF2fxlP15sOeu z&(z=C{B+-wP`2ZAPE=Kea=SrYKH3sfWUV1>^e2gDj!r+Vc2yZ{wqMxm_HGug6DC$a z(NA8>e_v5J)q#vO4Z8esYF{%kQ{KEuNoVCx#aGyadrejmkpN^(#sBo*u>K{@@b4jx zZ~3)}4?W@vhL5Qv z+fEG+16sdMb-LiJ)snT1mG7VcF>KJ;wP#biu+4}SS{kequ&2UPA^OFTn&3C%jiDDWdPa zc|q6hsOt>v;}>@&rAHcoxf^ZL-JFpl2ScQuN)4P}yu~^nH>aS)YChoO#rD^G42U-X zM91Z=A_MVZ2=-miNR)^@Ru*1(o2!53-x)uad$%6Ro=JptwE;{4vsfpP5m2T@;sr<| zzZlk82#d|TWk`FFG $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 -- 2.47.3