2011-06-10 10:00:22

by Andreas Dilger

[permalink] [raw]
Subject: [PATCH 1/3] ext2fs: Handle internal journal over 2^32 bytes

The write_journal_inode() code is only setting the low 32-bit i_size
for the journal size, even though it is possible to specify a journal
up to 10M blocks in size. Trying to create a journal larger than 2GB
will succeed, but an immediate e2fsck would fail. Store i_size_high
for the journal inode when creating it, and load it upon access.

Use s_jnl_blocks[15] to store the journal i_size_high backup. This
field is currently unused, as EXT2_N_BLOCKS is 15, so it is using
s_jnl_blocks[0..14], and i_size is in s_jnl_blocks[16].

Rename the "size" argument "num_blocks" for the journal creation functions
to clarify this parameter is in units of filesystem blocks and not bytes.

Signed-off-by: Andreas Dilger <[email protected]>
---
debugfs/logdump.c | 1 +
e2fsck/journal.c | 11 ++++++---
e2fsck/unix.c | 3 +-
lib/ext2fs/ext2fs.h | 8 +++---
lib/ext2fs/mkjournal.c | 49 ++++++++++++++++++++++++++++-------------------
lib/ext2fs/swapfs.c | 18 ++++++++--------
resize/resize2fs.c | 1 +
7 files changed, 53 insertions(+), 38 deletions(-)

diff --git a/debugfs/logdump.c b/debugfs/logdump.c
index 1f6b7c9..d1e64fd 100644
--- a/debugfs/logdump.c
+++ b/debugfs/logdump.c
@@ -209,6 +209,7 @@ void do_logdump(int argc, char **argv)
memset(&journal_inode, 0, sizeof(struct ext2_inode));
memcpy(&journal_inode.i_block[0], es->s_jnl_blocks,
EXT2_N_BLOCKS*4);
+ journal_inode.i_size_high = es->s_jnl_blocks[15];
journal_inode.i_size = es->s_jnl_blocks[16];
journal_inode.i_links_count = 1;
journal_inode.i_mode = LINUX_S_IFREG | 0600;
diff --git a/e2fsck/journal.c b/e2fsck/journal.c
index 93f685c..6d350ee 100644
--- a/e2fsck/journal.c
+++ b/e2fsck/journal.c
@@ -288,6 +288,7 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal)
memset(&j_inode->i_ext2, 0, sizeof(struct ext2_inode));
memcpy(&j_inode->i_ext2.i_block[0], sb->s_jnl_blocks,
EXT2_N_BLOCKS*4);
+ j_inode->i_ext2.i_size_high = sb->s_jnl_blocks[15];
j_inode->i_ext2.i_size = sb->s_jnl_blocks[16];
j_inode->i_ext2.i_links_count = 1;
j_inode->i_ext2.i_mode = LINUX_S_IFREG | 0600;
@@ -301,7 +302,7 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal)
retval = EXT2_ET_NO_JOURNAL;
goto try_backup_journal;
}
- if (j_inode->i_ext2.i_size / journal->j_blocksize <
+ if (EXT2_I_SIZE(&j_inode->i_ext2) / journal->j_blocksize <
JFS_MIN_JOURNAL_BLOCKS) {
retval = EXT2_ET_JOURNAL_TOO_SMALL;
goto try_backup_journal;
@@ -310,8 +311,8 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal)
retval = ext2fs_block_iterate3(ctx->fs, j_inode->i_ino,
BLOCK_FLAG_HOLE, 0,
process_journal_block, &pb);
- if ((pb.last_block+1) * ctx->fs->blocksize <
- j_inode->i_ext2.i_size) {
+ if ((pb.last_block + 1) * ctx->fs->blocksize <
+ EXT2_I_SIZE(&j_inode->i_ext2)) {
retval = EXT2_ET_JOURNAL_TOO_SMALL;
goto try_backup_journal;
}
@@ -322,7 +323,8 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal)
goto errout;
}

- journal->j_maxlen = j_inode->i_ext2.i_size / journal->j_blocksize;
+ journal->j_maxlen = EXT2_I_SIZE(&j_inode->i_ext2) /
+ journal->j_blocksize;

#ifdef USE_INODE_IO
retval = ext2fs_inode_io_intern2(ctx->fs, sb->s_journal_inum,
@@ -943,6 +945,7 @@ void e2fsck_move_ext3_journal(e2fsck_t ctx)
if (fix_problem(ctx, PR_0_BACKUP_JNL, &pctx)) {
memcpy(sb->s_jnl_blocks, inode.i_block,
EXT2_N_BLOCKS*4);
+ sb->s_jnl_blocks[15] = inode.i_size_high;
sb->s_jnl_blocks[16] = inode.i_size;
sb->s_jnl_backup_type = EXT3_JNL_BACKUP_BLOCKS;
ext2fs_mark_super_dirty(fs);
diff --git a/e2fsck/unix.c b/e2fsck/unix.c
index 998aa07..a43f0c9 100644
--- a/e2fsck/unix.c
+++ b/e2fsck/unix.c
@@ -1374,7 +1374,8 @@ print_unsupp_features:
* find the default journal size.
*/
if (sb->s_jnl_backup_type == EXT3_JNL_BACKUP_BLOCKS)
- journal_size = sb->s_jnl_blocks[16] >> 20;
+ journal_size = (sb->s_jnl_blocks[15] << (32 - 20)) |
+ (sb->s_jnl_blocks[16] >> 20);
else
journal_size = -1;

diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h
index 975ab9d..44447bf 100644
--- a/lib/ext2fs/ext2fs.h
+++ b/lib/ext2fs/ext2fs.h
@@ -1255,15 +1255,15 @@ extern errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum
extern errcode_t ext2fs_zero_blocks(ext2_filsys fs, blk_t blk, int num,
blk_t *ret_blk, int *ret_count);
extern errcode_t ext2fs_zero_blocks2(ext2_filsys fs, blk64_t blk, int num,
- blk64_t *ret_blk, int *ret_count);
+ blk64_t *ret_blk, int *ret_count);
extern errcode_t ext2fs_create_journal_superblock(ext2_filsys fs,
- __u32 size, int flags,
+ __u32 num_blocks, int flags,
char **ret_jsb);
extern errcode_t ext2fs_add_journal_device(ext2_filsys fs,
ext2_filsys journal_dev);
-extern errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t size,
+extern errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t num_blocks,
int flags);
-extern int ext2fs_default_journal_size(__u64 blocks);
+extern int ext2fs_default_journal_size(__u64 num_blocks);

/* openfs.c */
extern errcode_t ext2fs_open(const char *name, int flags, int superblock,
diff --git a/lib/ext2fs/mkjournal.c b/lib/ext2fs/mkjournal.c
index 242c537..36b75be 100644
--- a/lib/ext2fs/mkjournal.c
+++ b/lib/ext2fs/mkjournal.c
@@ -42,13 +42,13 @@
* returns it as an allocated block.
*/
errcode_t ext2fs_create_journal_superblock(ext2_filsys fs,
- __u32 size, int flags,
+ __u32 num_blocks, int flags,
char **ret_jsb)
{
errcode_t retval;
journal_superblock_t *jsb;

- if (size < 1024)
+ if (num_blocks < 1024)
return EXT2_ET_JOURNAL_TOO_SMALL;

if ((retval = ext2fs_get_mem(fs->blocksize, &jsb)))
@@ -62,7 +62,7 @@ errcode_t ext2fs_create_journal_superblock(ext2_filsys fs,
else
jsb->s_header.h_blocktype = htonl(JFS_SUPERBLOCK_V2);
jsb->s_blocksize = htonl(fs->blocksize);
- jsb->s_maxlen = htonl(size);
+ jsb->s_maxlen = htonl(num_blocks);
jsb->s_nr_users = htonl(1);
jsb->s_first = htonl(1);
jsb->s_sequence = htonl(1);
@@ -90,14 +90,15 @@ errcode_t ext2fs_create_journal_superblock(ext2_filsys fs,
* filesystems.
*/
static errcode_t write_journal_file(ext2_filsys fs, char *filename,
- blk_t size, int flags)
+ blk_t num_blocks, int flags)
{
errcode_t retval;
char *buf = 0;
int fd, ret_size;
blk_t i;

- if ((retval = ext2fs_create_journal_superblock(fs, size, flags, &buf)))
+ if ((retval = ext2fs_create_journal_superblock(fs, num_blocks, flags,
+ &buf)))
return retval;

/* Open the device or journal file */
@@ -117,7 +118,7 @@ static errcode_t write_journal_file(ext2_filsys fs, char *filename,
goto errout;
memset(buf, 0, fs->blocksize);

- for (i = 1; i < size; i++) {
+ for (i = 1; i < num_blocks; i++) {
ret_size = write(fd, buf, fs->blocksize);
if (ret_size < 0) {
retval = errno;
@@ -284,15 +285,17 @@ static int mkjournal_proc(ext2_filsys fs,
* This function creates a journal using direct I/O routines.
*/
static errcode_t write_journal_inode(ext2_filsys fs, ext2_ino_t journal_ino,
- blk64_t size, int flags)
+ blk_t num_blocks, int flags)
{
char *buf;
dgrp_t group, start, end, i, log_flex;
errcode_t retval;
struct ext2_inode inode;
+ unsigned long long inode_size;
struct mkjournal_struct es;

- if ((retval = ext2fs_create_journal_superblock(fs, size, flags, &buf)))
+ if ((retval = ext2fs_create_journal_superblock(fs, num_blocks, flags,
+ &buf)))
return retval;

if ((retval = ext2fs_read_bitmaps(fs)))
@@ -304,7 +307,7 @@ static errcode_t write_journal_inode(ext2_filsys fs, ext2_ino_t journal_ino,
if (inode.i_blocks > 0)
return EEXIST;

- es.num_blocks = size;
+ es.num_blocks = num_blocks;
es.newblocks = 0;
es.buf = buf;
es.err = 0;
@@ -360,7 +363,12 @@ static errcode_t write_journal_inode(ext2_filsys fs, ext2_ino_t journal_ino,
if ((retval = ext2fs_read_inode(fs, journal_ino, &inode)))
goto errout;

- inode.i_size += fs->blocksize * size;
+ inode_size = (unsigned long long)fs->blocksize * num_blocks;
+ inode.i_size = inode_size & 0xFFFFFFFF;
+ inode.i_size_high = (inode_size >> 32) & 0xFFFFFFFF;
+ if (inode.i_size_high)
+ fs->super->s_feature_ro_compat |=
+ EXT2_FEATURE_RO_COMPAT_LARGE_FILE;
ext2fs_iblk_add_blocks(fs, &inode, es.newblocks);
inode.i_mtime = inode.i_ctime = fs->now ? fs->now : time(0);
inode.i_links_count = 1;
@@ -371,6 +379,7 @@ static errcode_t write_journal_inode(ext2_filsys fs, ext2_ino_t journal_ino,
retval = 0;

memcpy(fs->super->s_jnl_blocks, inode.i_block, EXT2_N_BLOCKS*4);
+ fs->super->s_jnl_blocks[15] = inode.i_size_high;
fs->super->s_jnl_blocks[16] = inode.i_size;
fs->super->s_jnl_backup_type = EXT3_JNL_BACKUP_BLOCKS;
ext2fs_mark_super_dirty(fs);
@@ -386,17 +395,17 @@ errout:
* in the filesystem. For very small filesystems, it is not reasonable to
* have a journal that fills more than half of the filesystem.
*/
-int ext2fs_default_journal_size(__u64 blocks)
+int ext2fs_default_journal_size(__u64 num_blocks)
{
- if (blocks < 2048)
+ if (num_blocks < 2048)
return -1;
- if (blocks < 32768)
+ if (num_blocks < 32768)
return (1024);
- if (blocks < 256*1024)
+ if (num_blocks < 256*1024)
return (4096);
- if (blocks < 512*1024)
+ if (num_blocks < 512*1024)
return (8192);
- if (blocks < 1024*1024)
+ if (num_blocks < 1024*1024)
return (16384);
return 32768;
}
@@ -467,7 +476,7 @@ errcode_t ext2fs_add_journal_device(ext2_filsys fs, ext2_filsys journal_dev)
* POSIX routines if the filesystem is mounted, or using direct I/O
* functions if it is not.
*/
-errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t size, int flags)
+errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t num_blocks, int flags)
{
errcode_t retval;
ext2_ino_t journal_ino;
@@ -504,7 +513,7 @@ errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t size, int flags)
if ((fd = open(jfile, O_CREAT|O_WRONLY, 0600)) < 0)
return errno;

- if ((retval = write_journal_file(fs, jfile, size, flags)))
+ if ((retval = write_journal_file(fs, jfile, num_blocks, flags)))
goto errout;

/* Get inode number of the journal file */
@@ -544,7 +553,7 @@ errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t size, int flags)
}
journal_ino = EXT2_JOURNAL_INO;
if ((retval = write_journal_inode(fs, journal_ino,
- size, flags)))
+ num_blocks, flags)))
return retval;
}

@@ -567,7 +576,7 @@ main(int argc, char **argv)
{
errcode_t retval;
char *device_name;
- ext2_filsys fs;
+ ext2_filsys fs;

if (argc < 2) {
fprintf(stderr, "Usage: %s filesystem\n", argv[0]);
diff --git a/lib/ext2fs/swapfs.c b/lib/ext2fs/swapfs.c
index 3a43c6c..87b1a2e 100644
--- a/lib/ext2fs/swapfs.c
+++ b/lib/ext2fs/swapfs.c
@@ -83,16 +83,16 @@ void ext2fs_swap_super(struct ext2_super_block * sb)
sb->s_hash_seed[i] = ext2fs_swab32(sb->s_hash_seed[i]);

/* if journal backup is for a valid extent-based journal... */
- if (!ext2fs_extent_header_verify(sb->s_jnl_blocks,
- sizeof(sb->s_jnl_blocks))) {
- /* ... swap only the journal i_size */
- sb->s_jnl_blocks[16] = ext2fs_swab32(sb->s_jnl_blocks[16]);
- /* and the extent data is not swapped on read */
- return;
+ if (ext2fs_extent_header_verify(sb->s_jnl_blocks,
+ sizeof(sb->s_jnl_blocks)) == 0) {
+ /* ... swap only the journal i_size and i_size_high,
+ * and the extent data is not swapped on read */
+ i = 15;
+ } else {
+ /* direct/indirect journal: swap it all */
+ i = 0;
}


2011-06-10 10:00:23

by Andreas Dilger

[permalink] [raw]
Subject: [PATCH 2/3] mke2fs: skip zeroing journal blocks

Add the ability to skip zeroing journal blocks on disk. This can
significantly speed up mke2fs with large journals. At worst the
uninitialized journal is only a very short-term risk (if at all),
because the journal will be overwritten on any new filesystem as
soon as any significant amount of data is written to disk, and
the new journal TID would need to match the offset/TID of an old
commit block still left on disk.

Signed-off-by: Andreas Dilger <[email protected]>
---
lib/ext2fs/ext2fs.h | 5 ++---
lib/ext2fs/mkjournal.c | 20 +++++++++++++++++---
misc/mke2fs.8.in | 10 +++++++++-
misc/mke2fs.c | 17 ++++++++++++++++-
4 files changed, 44 insertions(+), 8 deletions(-)

diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h
index 44447bf..6ce9975 100644
--- a/lib/ext2fs/ext2fs.h
+++ b/lib/ext2fs/ext2fs.h
@@ -204,10 +204,9 @@ typedef struct ext2_file *ext2_file_t;

/*
* Flags for mkjournal
- *
- * EXT2_MKJOURNAL_V1_SUPER Make a (deprecated) V1 journal superblock
*/
-#define EXT2_MKJOURNAL_V1_SUPER 0x0000001
+#define EXT2_MKJOURNAL_V1_SUPER 0x0000001 /* create V1 superblock (deprecated) */
+#define EXT2_MKJOURNAL_LAZYINIT 0x0000002 /* don't zero journal inode before use*/

struct opaque_ext2_group_desc;

diff --git a/lib/ext2fs/mkjournal.c b/lib/ext2fs/mkjournal.c
index 36b75be..0b6c0c1 100644
--- a/lib/ext2fs/mkjournal.c
+++ b/lib/ext2fs/mkjournal.c
@@ -104,7 +104,7 @@ static errcode_t write_journal_file(ext2_filsys fs, char *filename,
/* Open the device or journal file */
if ((fd = open(filename, O_WRONLY)) < 0) {
retval = errno;
- goto errout;
+ goto errfree;
}

/* Write the superblock out */
@@ -118,6 +118,9 @@ static errcode_t write_journal_file(ext2_filsys fs, char *filename,
goto errout;
memset(buf, 0, fs->blocksize);

+ if (flags & EXT2_MKJOURNAL_LAZYINIT)
+ goto success;
+
for (i = 1; i < num_blocks; i++) {
ret_size = write(fd, buf, fs->blocksize);
if (ret_size < 0) {
@@ -127,10 +130,12 @@ static errcode_t write_journal_file(ext2_filsys fs, char *filename,
if (ret_size != (int) fs->blocksize)
goto errout;
}
- close(fd);

+success:
retval = 0;
errout:
+ close(fd);
+errfree:
ext2fs_free_mem(&buf);
return retval;
}
@@ -214,6 +219,7 @@ struct mkjournal_struct {
blk64_t goal;
blk64_t blk_to_zero;
int zero_count;
+ int flags;
char *buf;
errcode_t err;
};
@@ -245,7 +251,7 @@ static int mkjournal_proc(ext2_filsys fs,
retval = 0;
if (blockcnt <= 0)
retval = io_channel_write_blk64(fs->io, new_blk, 1, es->buf);
- else {
+ else if (!(es->flags & EXT2_MKJOURNAL_LAZYINIT)) {
if (es->zero_count) {
if ((es->blk_to_zero + es->zero_count == new_blk) &&
(es->zero_count < 1024))
@@ -311,6 +317,7 @@ static errcode_t write_journal_inode(ext2_filsys fs, ext2_ino_t journal_ino,
es.newblocks = 0;
es.buf = buf;
es.err = 0;
+ es.flags = flags;
es.zero_count = 0;

if (fs->super->s_feature_incompat & EXT3_FEATURE_INCOMPAT_EXTENTS) {
@@ -513,6 +520,13 @@ errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t num_blocks, int flags)
if ((fd = open(jfile, O_CREAT|O_WRONLY, 0600)) < 0)
return errno;

+ /* Note that we can't do lazy journal initialization for mounted
+ * filesystems, since the zero writing is also allocating the
+ * journal blocks. We could use fallocate, but not all kernels
+ * support that, and creating a journal on a mounted ext2
+ * filesystems is extremely rare these days... Ignore it. */
+ flags &= ~EXT2_MKJOURNAL_LAZYINIT;
+
if ((retval = write_journal_file(fs, jfile, num_blocks, flags)))
goto errout;

diff --git a/misc/mke2fs.8.in b/misc/mke2fs.8.in
index 4a3b0c3..0d4b046 100644
--- a/misc/mke2fs.8.in
+++ b/misc/mke2fs.8.in
@@ -232,7 +232,15 @@ This speeds up filesystem
initialization noticeably, but it requires the kernel to finish
initializing the filesystem in the background when the filesystem is
first mounted. If the option value is omitted, it defaults to 1 to
-enable lazy inode table initialization.
+enable lazy inode table zeroing.
+.TP
+.B lazy_journal_init\fR[\fB= \fI<0 to disable, 1 to enable>\fR]
+If enabled, the journal inode will not be fully zeroed out by
+.BR mke2fs .
+This speeds up filesystem initialization noticeably, but carries some
+small risk if the system crashes before the journal has been overwritten
+entirely one time. If the option value is omitted, it defaults to 1 to
+enable lazy journal inode zeroing.
.TP
.B test_fs
Set a flag in the filesystem superblock indicating that it may be
diff --git a/misc/mke2fs.c b/misc/mke2fs.c
index 9472016..7627e6d 100644
--- a/misc/mke2fs.c
+++ b/misc/mke2fs.c
@@ -503,6 +503,10 @@ static void create_journal_dev(ext2_filsys fs)
_("while initializing journal superblock"));
exit(1);
}
+
+ if (journal_flags & EXT2_MKJOURNAL_LAZYINIT)
+ goto write_superblock;
+
ext2fs_numeric_progress_init(fs, &progress,
_("Zeroing journal device: "),
ext2fs_blocks_count(fs->super));
@@ -527,6 +531,8 @@ static void create_journal_dev(ext2_filsys fs)
}
ext2fs_zero_blocks2(0, 0, 0, 0, 0);

+ ext2fs_numeric_progress_close(fs, &progress, NULL);
+write_superblock:
retval = io_channel_write_blk64(fs->io,
fs->super->s_first_data_block+1,
1, buf);
@@ -535,7 +541,6 @@ static void create_journal_dev(ext2_filsys fs)
_("while writing journal superblock"));
exit(1);
}
- ext2fs_numeric_progress_close(fs, &progress, NULL);
}

static void show_stats(ext2_filsys fs)
@@ -761,6 +766,12 @@ static void parse_extended_opts(struct ext2_super_block *param,
lazy_itable_init = strtoul(arg, &p, 0);
else
lazy_itable_init = 1;
+ } else if (!strcmp(token, "lazy_journal_init")) {
+ if (arg)
+ journal_flags |= strtoul(arg, &p, 0) ?
+ EXT2_MKJOURNAL_LAZYINIT : 0;
+ else
+ journal_flags |= EXT2_MKJOURNAL_LAZYINIT;
} else if (!strcmp(token, "discard")) {
discard = 1;
} else if (!strcmp(token, "nodiscard")) {
@@ -780,6 +791,7 @@ static void parse_extended_opts(struct ext2_super_block *param,
"\tstripe-width=<RAID stride * data disks in blocks>\n"
"\tresize=<resize maximum size in blocks>\n"
"\tlazy_itable_init=<0 to disable, 1 to enable>\n"
+ "\tlazy_journal_init=<0 to disable, 1 to enable>\n"
"\ttest_fs\n"
"\tdiscard\n"
"\tnodiscard\n\n"),
@@ -1810,6 +1822,9 @@ profile_error:
"lazy_itable_init",
lazy_itable_init);
discard = get_bool_from_profile(fs_types, "discard" , discard);
+ journal_flags |= get_bool_from_profile(fs_types,
+ "lazy_journal_init", 0) ?
+ EXT2_MKJOURNAL_LAZYINIT : 0;

/* Get options from profile */
for (cpp = fs_types; *cpp; cpp++) {
--
1.7.3.4


2011-06-10 10:00:24

by Andreas Dilger

[permalink] [raw]
Subject: [PATCH 3/3] mke2fs: add test for large journal with lazy init

Add test for internal journal over 4GB in size, using the
lazy_journal_init and lazy_itable_init features. Otherwise
the filesystem metadata would be too large to reliably run on
test systems, and take too long to create/check the filesystem.

Signed-off-by: Andreas Dilger <[email protected]>
---
tests/m_bigjournal/expect.1 | 575 +++++++++++++++++++++++++++++++++++++++++++
tests/m_bigjournal/script | 4 +
2 files changed, 579 insertions(+), 0 deletions(-)
create mode 100644 tests/m_bigjournal/expect.1
create mode 100644 tests/m_bigjournal/script

diff --git a/tests/m_bigjournal/expect.1 b/tests/m_bigjournal/expect.1
new file mode 100644
index 0000000..ad4a035
--- /dev/null
+++ b/tests/m_bigjournal/expect.1
@@ -0,0 +1,575 @@
+Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
+
+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/1344 files (0.0% non-contiguous), 1286989/2750000 blocks
+Exit status is 0
+
+Filesystem volume name: <none>
+Last mounted on: <not available>
+Filesystem magic number: 0xEF53
+Filesystem revision #: 1 (dynamic)
+Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
+Default mount options: (none)
+Filesystem state: clean
+Errors behavior: Continue
+Filesystem OS type: Linux
+Inode count: 1344
+Block count: 2750000
+Reserved block count: 137500
+Free blocks: 1463011
+Free inodes: 1333
+First block: 0
+Block size: 4096
+Fragment size: 4096
+Reserved GDT blocks: 671
+Blocks per group: 32768
+Fragments per group: 32768
+Inodes per group: 16
+Inode blocks per group: 1
+Flex block group size: 512
+Mount count: 0
+Check interval: 15552000 (6 months)
+Reserved blocks uid: 0
+Reserved blocks gid: 0
+First inode: 11
+Inode size: 256
+Required extra isize: 28
+Desired extra isize: 28
+Journal inode: 8
+Default directory hash: half_md4
+Journal backup: inode blocks
+Journal features: (none)
+Journal size: 5000M
+Journal length: 1280000
+Journal sequence: 0x00000001
+Journal start: 0
+
+
+Group 0: (Blocks 0-32767)
+ Primary superblock at 0, Group descriptors at 1-1
+ Reserved GDT blocks at 2-672
+ Block bitmap at 673 (+673), Inode bitmap at 1185 (+1185)
+ Inode table at 1697-1697 (+1697)
+ 31836 free blocks, 5 free inodes, 2 directories, 5 unused inodes
+ Free blocks: 764-1184, 1269-1696, 1781-32767
+ Free inodes: 12-16
+Group 1: (Blocks 32768-65535) [INODE_UNINIT]
+ Backup superblock at 32768, Group descriptors at 32769-32769
+ Reserved GDT blocks at 32770-33440
+ Block bitmap at 674 (bg #0 + 674), Inode bitmap at 1186 (bg #0 + 1186)
+ Inode table at 1698-1698 (bg #0 + 1698)
+ 32095 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 33441-65535
+ Free inodes: 17-32
+Group 2: (Blocks 65536-98303) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 675 (bg #0 + 675), Inode bitmap at 1187 (bg #0 + 1187)
+ Inode table at 1699-1699 (bg #0 + 1699)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 65536-98303
+ Free inodes: 33-48
+Group 3: (Blocks 98304-131071) [INODE_UNINIT]
+ Backup superblock at 98304, Group descriptors at 98305-98305
+ Reserved GDT blocks at 98306-98976
+ Block bitmap at 676 (bg #0 + 676), Inode bitmap at 1188 (bg #0 + 1188)
+ Inode table at 1700-1700 (bg #0 + 1700)
+ 32095 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 98977-131071
+ Free inodes: 49-64
+Group 4: (Blocks 131072-163839) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 677 (bg #0 + 677), Inode bitmap at 1189 (bg #0 + 1189)
+ Inode table at 1701-1701 (bg #0 + 1701)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 131072-163839
+ Free inodes: 65-80
+Group 5: (Blocks 163840-196607) [INODE_UNINIT]
+ Backup superblock at 163840, Group descriptors at 163841-163841
+ Reserved GDT blocks at 163842-164512
+ Block bitmap at 678 (bg #0 + 678), Inode bitmap at 1190 (bg #0 + 1190)
+ Inode table at 1702-1702 (bg #0 + 1702)
+ 32095 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 164513-196607
+ Free inodes: 81-96
+Group 6: (Blocks 196608-229375) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 679 (bg #0 + 679), Inode bitmap at 1191 (bg #0 + 1191)
+ Inode table at 1703-1703 (bg #0 + 1703)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 196608-229375
+ Free inodes: 97-112
+Group 7: (Blocks 229376-262143) [INODE_UNINIT]
+ Backup superblock at 229376, Group descriptors at 229377-229377
+ Reserved GDT blocks at 229378-230048
+ Block bitmap at 680 (bg #0 + 680), Inode bitmap at 1192 (bg #0 + 1192)
+ Inode table at 1704-1704 (bg #0 + 1704)
+ 32095 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 230049-262143
+ Free inodes: 113-128
+Group 8: (Blocks 262144-294911) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 681 (bg #0 + 681), Inode bitmap at 1193 (bg #0 + 1193)
+ Inode table at 1705-1705 (bg #0 + 1705)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 262144-294911
+ Free inodes: 129-144
+Group 9: (Blocks 294912-327679) [INODE_UNINIT]
+ Backup superblock at 294912, Group descriptors at 294913-294913
+ Reserved GDT blocks at 294914-295584
+ Block bitmap at 682 (bg #0 + 682), Inode bitmap at 1194 (bg #0 + 1194)
+ Inode table at 1706-1706 (bg #0 + 1706)
+ 32095 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 295585-327679
+ Free inodes: 145-160
+Group 10: (Blocks 327680-360447) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 683 (bg #0 + 683), Inode bitmap at 1195 (bg #0 + 1195)
+ Inode table at 1707-1707 (bg #0 + 1707)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 327680-360447
+ Free inodes: 161-176
+Group 11: (Blocks 360448-393215) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 684 (bg #0 + 684), Inode bitmap at 1196 (bg #0 + 1196)
+ Inode table at 1708-1708 (bg #0 + 1708)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 360448-393215
+ Free inodes: 177-192
+Group 12: (Blocks 393216-425983) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 685 (bg #0 + 685), Inode bitmap at 1197 (bg #0 + 1197)
+ Inode table at 1709-1709 (bg #0 + 1709)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 393216-425983
+ Free inodes: 193-208
+Group 13: (Blocks 425984-458751) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 686 (bg #0 + 686), Inode bitmap at 1198 (bg #0 + 1198)
+ Inode table at 1710-1710 (bg #0 + 1710)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 425984-458751
+ Free inodes: 209-224
+Group 14: (Blocks 458752-491519) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 687 (bg #0 + 687), Inode bitmap at 1199 (bg #0 + 1199)
+ Inode table at 1711-1711 (bg #0 + 1711)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 458752-491519
+ Free inodes: 225-240
+Group 15: (Blocks 491520-524287) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 688 (bg #0 + 688), Inode bitmap at 1200 (bg #0 + 1200)
+ Inode table at 1712-1712 (bg #0 + 1712)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 491520-524287
+ Free inodes: 241-256
+Group 16: (Blocks 524288-557055) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 689 (bg #0 + 689), Inode bitmap at 1201 (bg #0 + 1201)
+ Inode table at 1713-1713 (bg #0 + 1713)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 524288-557055
+ Free inodes: 257-272
+Group 17: (Blocks 557056-589823) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 690 (bg #0 + 690), Inode bitmap at 1202 (bg #0 + 1202)
+ Inode table at 1714-1714 (bg #0 + 1714)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 557056-589823
+ Free inodes: 273-288
+Group 18: (Blocks 589824-622591) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 691 (bg #0 + 691), Inode bitmap at 1203 (bg #0 + 1203)
+ Inode table at 1715-1715 (bg #0 + 1715)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 589824-622591
+ Free inodes: 289-304
+Group 19: (Blocks 622592-655359) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 692 (bg #0 + 692), Inode bitmap at 1204 (bg #0 + 1204)
+ Inode table at 1716-1716 (bg #0 + 1716)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 622592-655359
+ Free inodes: 305-320
+Group 20: (Blocks 655360-688127) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 693 (bg #0 + 693), Inode bitmap at 1205 (bg #0 + 1205)
+ Inode table at 1717-1717 (bg #0 + 1717)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 655360-688127
+ Free inodes: 321-336
+Group 21: (Blocks 688128-720895) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 694 (bg #0 + 694), Inode bitmap at 1206 (bg #0 + 1206)
+ Inode table at 1718-1718 (bg #0 + 1718)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 688128-720895
+ Free inodes: 337-352
+Group 22: (Blocks 720896-753663) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 695 (bg #0 + 695), Inode bitmap at 1207 (bg #0 + 1207)
+ Inode table at 1719-1719 (bg #0 + 1719)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 720896-753663
+ Free inodes: 353-368
+Group 23: (Blocks 753664-786431) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 696 (bg #0 + 696), Inode bitmap at 1208 (bg #0 + 1208)
+ Inode table at 1720-1720 (bg #0 + 1720)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 753664-786431
+ Free inodes: 369-384
+Group 24: (Blocks 786432-819199) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 697 (bg #0 + 697), Inode bitmap at 1209 (bg #0 + 1209)
+ Inode table at 1721-1721 (bg #0 + 1721)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 786432-819199
+ Free inodes: 385-400
+Group 25: (Blocks 819200-851967) [INODE_UNINIT]
+ Backup superblock at 819200, Group descriptors at 819201-819201
+ Reserved GDT blocks at 819202-819872
+ Block bitmap at 698 (bg #0 + 698), Inode bitmap at 1210 (bg #0 + 1210)
+ Inode table at 1722-1722 (bg #0 + 1722)
+ 32095 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 819873-851967
+ Free inodes: 401-416
+Group 26: (Blocks 851968-884735) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 699 (bg #0 + 699), Inode bitmap at 1211 (bg #0 + 1211)
+ Inode table at 1723-1723 (bg #0 + 1723)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 851968-884735
+ Free inodes: 417-432
+Group 27: (Blocks 884736-917503) [INODE_UNINIT]
+ Backup superblock at 884736, Group descriptors at 884737-884737
+ Reserved GDT blocks at 884738-885408
+ Block bitmap at 700 (bg #0 + 700), Inode bitmap at 1212 (bg #0 + 1212)
+ Inode table at 1724-1724 (bg #0 + 1724)
+ 32095 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 885409-917503
+ Free inodes: 433-448
+Group 28: (Blocks 917504-950271) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 701 (bg #0 + 701), Inode bitmap at 1213 (bg #0 + 1213)
+ Inode table at 1725-1725 (bg #0 + 1725)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 917504-950271
+ Free inodes: 449-464
+Group 29: (Blocks 950272-983039) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 702 (bg #0 + 702), Inode bitmap at 1214 (bg #0 + 1214)
+ Inode table at 1726-1726 (bg #0 + 1726)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 950272-983039
+ Free inodes: 465-480
+Group 30: (Blocks 983040-1015807) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 703 (bg #0 + 703), Inode bitmap at 1215 (bg #0 + 1215)
+ Inode table at 1727-1727 (bg #0 + 1727)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 983040-1015807
+ Free inodes: 481-496
+Group 31: (Blocks 1015808-1048575) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 704 (bg #0 + 704), Inode bitmap at 1216 (bg #0 + 1216)
+ Inode table at 1728-1728 (bg #0 + 1728)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 1015808-1048575
+ Free inodes: 497-512
+Group 32: (Blocks 1048576-1081343) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 705 (bg #0 + 705), Inode bitmap at 1217 (bg #0 + 1217)
+ Inode table at 1729-1729 (bg #0 + 1729)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 1048576-1081343
+ Free inodes: 513-528
+Group 33: (Blocks 1081344-1114111) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 706 (bg #0 + 706), Inode bitmap at 1218 (bg #0 + 1218)
+ Inode table at 1730-1730 (bg #0 + 1730)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 1081344-1114111
+ Free inodes: 529-544
+Group 34: (Blocks 1114112-1146879) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 707 (bg #0 + 707), Inode bitmap at 1219 (bg #0 + 1219)
+ Inode table at 1731-1731 (bg #0 + 1731)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 1114112-1146879
+ Free inodes: 545-560
+Group 35: (Blocks 1146880-1179647) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 708 (bg #0 + 708), Inode bitmap at 1220 (bg #0 + 1220)
+ Inode table at 1732-1732 (bg #0 + 1732)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 1146880-1179647
+ Free inodes: 561-576
+Group 36: (Blocks 1179648-1212415) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 709 (bg #0 + 709), Inode bitmap at 1221 (bg #0 + 1221)
+ Inode table at 1733-1733 (bg #0 + 1733)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 1179648-1212415
+ Free inodes: 577-592
+Group 37: (Blocks 1212416-1245183) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 710 (bg #0 + 710), Inode bitmap at 1222 (bg #0 + 1222)
+ Inode table at 1734-1734 (bg #0 + 1734)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 1212416-1245183
+ Free inodes: 593-608
+Group 38: (Blocks 1245184-1277951) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 711 (bg #0 + 711), Inode bitmap at 1223 (bg #0 + 1223)
+ Inode table at 1735-1735 (bg #0 + 1735)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 1245184-1277951
+ Free inodes: 609-624
+Group 39: (Blocks 1277952-1310719) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 712 (bg #0 + 712), Inode bitmap at 1224 (bg #0 + 1224)
+ Inode table at 1736-1736 (bg #0 + 1736)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 1277952-1310719
+ Free inodes: 625-640
+Group 40: (Blocks 1310720-1343487) [INODE_UNINIT]
+ Block bitmap at 713 (bg #0 + 713), Inode bitmap at 1225 (bg #0 + 1225)
+ Inode table at 1737-1737 (bg #0 + 1737)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 641-656
+Group 41: (Blocks 1343488-1376255) [INODE_UNINIT]
+ Block bitmap at 714 (bg #0 + 714), Inode bitmap at 1226 (bg #0 + 1226)
+ Inode table at 1738-1738 (bg #0 + 1738)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 657-672
+Group 42: (Blocks 1376256-1409023) [INODE_UNINIT]
+ Block bitmap at 715 (bg #0 + 715), Inode bitmap at 1227 (bg #0 + 1227)
+ Inode table at 1739-1739 (bg #0 + 1739)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 673-688
+Group 43: (Blocks 1409024-1441791) [INODE_UNINIT]
+ Block bitmap at 716 (bg #0 + 716), Inode bitmap at 1228 (bg #0 + 1228)
+ Inode table at 1740-1740 (bg #0 + 1740)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 689-704
+Group 44: (Blocks 1441792-1474559) [INODE_UNINIT]
+ Block bitmap at 717 (bg #0 + 717), Inode bitmap at 1229 (bg #0 + 1229)
+ Inode table at 1741-1741 (bg #0 + 1741)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 705-720
+Group 45: (Blocks 1474560-1507327) [INODE_UNINIT]
+ Block bitmap at 718 (bg #0 + 718), Inode bitmap at 1230 (bg #0 + 1230)
+ Inode table at 1742-1742 (bg #0 + 1742)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 721-736
+Group 46: (Blocks 1507328-1540095) [INODE_UNINIT]
+ Block bitmap at 719 (bg #0 + 719), Inode bitmap at 1231 (bg #0 + 1231)
+ Inode table at 1743-1743 (bg #0 + 1743)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 737-752
+Group 47: (Blocks 1540096-1572863) [INODE_UNINIT]
+ Block bitmap at 720 (bg #0 + 720), Inode bitmap at 1232 (bg #0 + 1232)
+ Inode table at 1744-1744 (bg #0 + 1744)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 753-768
+Group 48: (Blocks 1572864-1605631) [INODE_UNINIT]
+ Block bitmap at 721 (bg #0 + 721), Inode bitmap at 1233 (bg #0 + 1233)
+ Inode table at 1745-1745 (bg #0 + 1745)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 769-784
+Group 49: (Blocks 1605632-1638399) [INODE_UNINIT]
+ Backup superblock at 1605632, Group descriptors at 1605633-1605633
+ Reserved GDT blocks at 1605634-1606304
+ Block bitmap at 722 (bg #0 + 722), Inode bitmap at 1234 (bg #0 + 1234)
+ Inode table at 1746-1746 (bg #0 + 1746)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 785-800
+Group 50: (Blocks 1638400-1671167) [INODE_UNINIT]
+ Block bitmap at 723 (bg #0 + 723), Inode bitmap at 1235 (bg #0 + 1235)
+ Inode table at 1747-1747 (bg #0 + 1747)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 801-816
+Group 51: (Blocks 1671168-1703935) [INODE_UNINIT]
+ Block bitmap at 724 (bg #0 + 724), Inode bitmap at 1236 (bg #0 + 1236)
+ Inode table at 1748-1748 (bg #0 + 1748)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 817-832
+Group 52: (Blocks 1703936-1736703) [INODE_UNINIT]
+ Block bitmap at 725 (bg #0 + 725), Inode bitmap at 1237 (bg #0 + 1237)
+ Inode table at 1749-1749 (bg #0 + 1749)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 833-848
+Group 53: (Blocks 1736704-1769471) [INODE_UNINIT]
+ Block bitmap at 726 (bg #0 + 726), Inode bitmap at 1238 (bg #0 + 1238)
+ Inode table at 1750-1750 (bg #0 + 1750)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 849-864
+Group 54: (Blocks 1769472-1802239) [INODE_UNINIT]
+ Block bitmap at 727 (bg #0 + 727), Inode bitmap at 1239 (bg #0 + 1239)
+ Inode table at 1751-1751 (bg #0 + 1751)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 865-880
+Group 55: (Blocks 1802240-1835007) [INODE_UNINIT]
+ Block bitmap at 728 (bg #0 + 728), Inode bitmap at 1240 (bg #0 + 1240)
+ Inode table at 1752-1752 (bg #0 + 1752)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 881-896
+Group 56: (Blocks 1835008-1867775) [INODE_UNINIT]
+ Block bitmap at 729 (bg #0 + 729), Inode bitmap at 1241 (bg #0 + 1241)
+ Inode table at 1753-1753 (bg #0 + 1753)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 897-912
+Group 57: (Blocks 1867776-1900543) [INODE_UNINIT]
+ Block bitmap at 730 (bg #0 + 730), Inode bitmap at 1242 (bg #0 + 1242)
+ Inode table at 1754-1754 (bg #0 + 1754)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 913-928
+Group 58: (Blocks 1900544-1933311) [INODE_UNINIT]
+ Block bitmap at 731 (bg #0 + 731), Inode bitmap at 1243 (bg #0 + 1243)
+ Inode table at 1755-1755 (bg #0 + 1755)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 929-944
+Group 59: (Blocks 1933312-1966079) [INODE_UNINIT]
+ Block bitmap at 732 (bg #0 + 732), Inode bitmap at 1244 (bg #0 + 1244)
+ Inode table at 1756-1756 (bg #0 + 1756)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 945-960
+Group 60: (Blocks 1966080-1998847) [INODE_UNINIT]
+ Block bitmap at 733 (bg #0 + 733), Inode bitmap at 1245 (bg #0 + 1245)
+ Inode table at 1757-1757 (bg #0 + 1757)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 961-976
+Group 61: (Blocks 1998848-2031615) [INODE_UNINIT]
+ Block bitmap at 734 (bg #0 + 734), Inode bitmap at 1246 (bg #0 + 1246)
+ Inode table at 1758-1758 (bg #0 + 1758)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 977-992
+Group 62: (Blocks 2031616-2064383) [INODE_UNINIT]
+ Block bitmap at 735 (bg #0 + 735), Inode bitmap at 1247 (bg #0 + 1247)
+ Inode table at 1759-1759 (bg #0 + 1759)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 993-1008
+Group 63: (Blocks 2064384-2097151) [INODE_UNINIT]
+ Block bitmap at 736 (bg #0 + 736), Inode bitmap at 1248 (bg #0 + 1248)
+ Inode table at 1760-1760 (bg #0 + 1760)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 1009-1024
+Group 64: (Blocks 2097152-2129919) [INODE_UNINIT]
+ Block bitmap at 737 (bg #0 + 737), Inode bitmap at 1249 (bg #0 + 1249)
+ Inode table at 1761-1761 (bg #0 + 1761)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 1025-1040
+Group 65: (Blocks 2129920-2162687) [INODE_UNINIT]
+ Block bitmap at 738 (bg #0 + 738), Inode bitmap at 1250 (bg #0 + 1250)
+ Inode table at 1762-1762 (bg #0 + 1762)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 1041-1056
+Group 66: (Blocks 2162688-2195455) [INODE_UNINIT]
+ Block bitmap at 739 (bg #0 + 739), Inode bitmap at 1251 (bg #0 + 1251)
+ Inode table at 1763-1763 (bg #0 + 1763)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 1057-1072
+Group 67: (Blocks 2195456-2228223) [INODE_UNINIT]
+ Block bitmap at 740 (bg #0 + 740), Inode bitmap at 1252 (bg #0 + 1252)
+ Inode table at 1764-1764 (bg #0 + 1764)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 1073-1088
+Group 68: (Blocks 2228224-2260991) [INODE_UNINIT]
+ Block bitmap at 741 (bg #0 + 741), Inode bitmap at 1253 (bg #0 + 1253)
+ Inode table at 1765-1765 (bg #0 + 1765)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 1089-1104
+Group 69: (Blocks 2260992-2293759) [INODE_UNINIT]
+ Block bitmap at 742 (bg #0 + 742), Inode bitmap at 1254 (bg #0 + 1254)
+ Inode table at 1766-1766 (bg #0 + 1766)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 1105-1120
+Group 70: (Blocks 2293760-2326527) [INODE_UNINIT]
+ Block bitmap at 743 (bg #0 + 743), Inode bitmap at 1255 (bg #0 + 1255)
+ Inode table at 1767-1767 (bg #0 + 1767)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 1121-1136
+Group 71: (Blocks 2326528-2359295) [INODE_UNINIT]
+ Block bitmap at 744 (bg #0 + 744), Inode bitmap at 1256 (bg #0 + 1256)
+ Inode table at 1768-1768 (bg #0 + 1768)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 1137-1152
+Group 72: (Blocks 2359296-2392063) [INODE_UNINIT]
+ Block bitmap at 745 (bg #0 + 745), Inode bitmap at 1257 (bg #0 + 1257)
+ Inode table at 1769-1769 (bg #0 + 1769)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 1153-1168
+Group 73: (Blocks 2392064-2424831) [INODE_UNINIT]
+ Block bitmap at 746 (bg #0 + 746), Inode bitmap at 1258 (bg #0 + 1258)
+ Inode table at 1770-1770 (bg #0 + 1770)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 1169-1184
+Group 74: (Blocks 2424832-2457599) [INODE_UNINIT]
+ Block bitmap at 747 (bg #0 + 747), Inode bitmap at 1259 (bg #0 + 1259)
+ Inode table at 1771-1771 (bg #0 + 1771)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 1185-1200
+Group 75: (Blocks 2457600-2490367) [INODE_UNINIT]
+ Block bitmap at 748 (bg #0 + 748), Inode bitmap at 1260 (bg #0 + 1260)
+ Inode table at 1772-1772 (bg #0 + 1772)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 1201-1216
+Group 76: (Blocks 2490368-2523135) [INODE_UNINIT]
+ Block bitmap at 749 (bg #0 + 749), Inode bitmap at 1261 (bg #0 + 1261)
+ Inode table at 1773-1773 (bg #0 + 1773)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 1217-1232
+Group 77: (Blocks 2523136-2555903) [INODE_UNINIT]
+ Block bitmap at 750 (bg #0 + 750), Inode bitmap at 1262 (bg #0 + 1262)
+ Inode table at 1774-1774 (bg #0 + 1774)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 1233-1248
+Group 78: (Blocks 2555904-2588671) [INODE_UNINIT]
+ Block bitmap at 751 (bg #0 + 751), Inode bitmap at 1263 (bg #0 + 1263)
+ Inode table at 1775-1775 (bg #0 + 1775)
+ 0 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks:
+ Free inodes: 1249-1264
+Group 79: (Blocks 2588672-2621439) [INODE_UNINIT]
+ Block bitmap at 752 (bg #0 + 752), Inode bitmap at 1264 (bg #0 + 1264)
+ Inode table at 1776-1776 (bg #0 + 1776)
+ 30047 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 2591393-2621439
+ Free inodes: 1265-1280
+Group 80: (Blocks 2621440-2654207) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 753 (bg #0 + 753), Inode bitmap at 1265 (bg #0 + 1265)
+ Inode table at 1777-1777 (bg #0 + 1777)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 2621440-2654207
+ Free inodes: 1281-1296
+Group 81: (Blocks 2654208-2686975) [INODE_UNINIT]
+ Backup superblock at 2654208, Group descriptors at 2654209-2654209
+ Reserved GDT blocks at 2654210-2654880
+ Block bitmap at 754 (bg #0 + 754), Inode bitmap at 1266 (bg #0 + 1266)
+ Inode table at 1778-1778 (bg #0 + 1778)
+ 32095 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 2654881-2686975
+ Free inodes: 1297-1312
+Group 82: (Blocks 2686976-2719743) [INODE_UNINIT, BLOCK_UNINIT]
+ Block bitmap at 755 (bg #0 + 755), Inode bitmap at 1267 (bg #0 + 1267)
+ Inode table at 1779-1779 (bg #0 + 1779)
+ 32768 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 2686976-2719743
+ Free inodes: 1313-1328
+Group 83: (Blocks 2719744-2749999) [INODE_UNINIT]
+ Block bitmap at 756 (bg #0 + 756), Inode bitmap at 1268 (bg #0 + 1268)
+ Inode table at 1780-1780 (bg #0 + 1780)
+ 30256 free blocks, 16 free inodes, 0 directories, 16 unused inodes
+ Free blocks: 2719744-2749999
+ Free inodes: 1329-1344
diff --git a/tests/m_bigjournal/script b/tests/m_bigjournal/script
new file mode 100644
index 0000000..29e0a24
--- /dev/null
+++ b/tests/m_bigjournal/script
@@ -0,0 +1,4 @@
+DESCRIPTION="journal over 4GB in size"
+FS_SIZE=11000000
+MKE2FS_OPTS="-t ext4 -G 512 -N 1280 -J size=5000 -q -E lazy_journal_init,lazy_itable_init"
+. $cmd_dir/run_mke2fs
--
1.7.3.4


2011-06-11 16:21:32

by Theodore Ts'o

[permalink] [raw]
Subject: Re: [PATCH 1/3] ext2fs: Handle internal journal over 2^32 bytes

On Fri, Jun 10, 2011 at 04:00:17AM -0600, Andreas Dilger wrote:
> The write_journal_inode() code is only setting the low 32-bit i_size
> for the journal size, even though it is possible to specify a journal
> up to 10M blocks in size. Trying to create a journal larger than 2GB
> will succeed, but an immediate e2fsck would fail. Store i_size_high
> for the journal inode when creating it, and load it upon access.
>
> Use s_jnl_blocks[15] to store the journal i_size_high backup. This
> field is currently unused, as EXT2_N_BLOCKS is 15, so it is using
> s_jnl_blocks[0..14], and i_size is in s_jnl_blocks[16].
>
> Rename the "size" argument "num_blocks" for the journal creation functions
> to clarify this parameter is in units of filesystem blocks and not bytes.
>
> Signed-off-by: Andreas Dilger <[email protected]>

Added to the next branch, thanks.

- Ted

2011-06-11 16:21:42

by Theodore Ts'o

[permalink] [raw]
Subject: Re: [PATCH 2/3] mke2fs: skip zeroing journal blocks

On Fri, Jun 10, 2011 at 04:00:18AM -0600, Andreas Dilger wrote:
> Add the ability to skip zeroing journal blocks on disk. This can
> significantly speed up mke2fs with large journals. At worst the
> uninitialized journal is only a very short-term risk (if at all),
> because the journal will be overwritten on any new filesystem as
> soon as any significant amount of data is written to disk, and
> the new journal TID would need to match the offset/TID of an old
> commit block still left on disk.
>
> Signed-off-by: Andreas Dilger <[email protected]>

Added to the next branch, thanks.

- Ted

2011-06-11 16:21:55

by Theodore Ts'o

[permalink] [raw]
Subject: Re: [PATCH 3/3] mke2fs: add test for large journal with lazy init

On Fri, Jun 10, 2011 at 04:00:19AM -0600, Andreas Dilger wrote:
> Add test for internal journal over 4GB in size, using the
> lazy_journal_init and lazy_itable_init features. Otherwise
> the filesystem metadata would be too large to reliably run on
> test systems, and take too long to create/check the filesystem.
>
> Signed-off-by: Andreas Dilger <[email protected]>

Added to the "next" branch, thanks.

- Ted