Whamcloud - gitweb
mke2fs: fix up topo complaints on regular files
[tools/e2fsprogs.git] / misc / dumpe2fs.c
index 61b82f6..a70cc4e 100644 (file)
@@ -50,8 +50,8 @@ int hex_format = 0;
 
 static void usage(void)
 {
-       fprintf (stderr, _("Usage: %s [-bfhixV] [-ob superblock] "
-                "[-oB blocksize] device\n"), program_name);
+       fprintf (stderr, _("Usage: %s [-bfhixV] [-o superblock=<num>] "
+                "[-o blocksize=<num>] device\n"), program_name);
        exit (1);
 }
 
@@ -243,6 +243,10 @@ static void list_desc (ext2_filsys fs)
                        ino_itr += fs->super->s_inodes_per_group;
                }
        }
+       if (block_bitmap)
+               free(block_bitmap);
+       if (inode_bitmap)
+               free(inode_bitmap);
 }
 
 static void list_bad_blocks(ext2_filsys fs, int dump)
@@ -277,14 +281,19 @@ static void list_bad_blocks(ext2_filsys fs, int dump)
        ext2fs_badblocks_list_iterate_end(bb_iter);
        if (!dump)
                fputc('\n', stdout);
+       ext2fs_badblocks_list_free(bb_list);
 }
 
 static void print_inline_journal_information(ext2_filsys fs)
 {
+       journal_superblock_t    *jsb;
        struct ext2_inode       inode;
+       ext2_file_t             journal_file;
        errcode_t               retval;
        ino_t                   ino = fs->super->s_journal_inum;
-       int                     size;
+       char                    buf[1024];
+       __u32                   *mask_ptr, mask, m;
+       int                     i, j, size, printed = 0;
 
        retval = ext2fs_read_inode(fs, ino,  &inode);
        if (retval) {
@@ -292,6 +301,38 @@ static void print_inline_journal_information(ext2_filsys fs)
                        _("while reading journal inode"));
                exit(1);
        }
+       retval = ext2fs_file_open2(fs, ino, &inode, 0, &journal_file);
+       if (retval) {
+               com_err(program_name, retval,
+                       _("while opening journal inode"));
+               exit(1);
+       }
+       retval = ext2fs_file_read(journal_file, buf, sizeof(buf), 0);
+       if (retval) {
+               com_err(program_name, retval,
+                       _("while reading journal super block"));
+               exit(1);
+       }
+       ext2fs_file_close(journal_file);
+       jsb = (journal_superblock_t *) buf;
+       if (be32_to_cpu(jsb->s_header.h_magic) != JFS_MAGIC_NUMBER) {
+               fprintf(stderr,
+                       "Journal superblock magic number invalid!\n");
+               exit(1);
+       }
+       printf(_("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++;
+                       }
+               }
+       }
+       if (printed == 0)
+               printf(" (none)");
+       printf("\n");
        fputs(_("Journal size:             "), stdout);
        if ((fs->super->s_feature_ro_compat &
             EXT4_FEATURE_RO_COMPAT_HUGE_FILE) &&
@@ -303,6 +344,12 @@ static void print_inline_journal_information(ext2_filsys fs)
                printf("%uk\n", size);
        else
                printf("%uM\n", size >> 10);
+       printf(_("Journal length:           %u\n"
+                "Journal sequence:         0x%08x\n"
+                "Journal start:            %u\n"),
+              (unsigned int)ntohl(jsb->s_maxlen),
+              (unsigned int)ntohl(jsb->s_sequence),
+              (unsigned int)ntohl(jsb->s_start));
 }
 
 static void print_journal_information(ext2_filsys fs)