mke2fs/libext2fs: Fix lazy inode table initialization

This fixes some bugs which I introduced recently while revamping the
uninit_bg code.  Since mke2fs is no longer calling
ext2fs_set_gdt_csum(), it's important that ext2fs_initialize()
correctly initialize bg_itable_unused for all block group descriptors.
In addition, mke2fs needs to zero out the the reserved inodes based on
the values of bg_itable_unused set by ext2fs_initialize().

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
diff --git a/lib/ext2fs/initialize.c b/lib/ext2fs/initialize.c
index 09e1008..8fc1b01 100644
--- a/lib/ext2fs/initialize.c
+++ b/lib/ext2fs/initialize.c
@@ -179,6 +179,9 @@
 			set_field(s_min_extra_isize, extra_isize);
 			set_field(s_want_extra_isize, extra_isize);
 		}
+	} else {
+		super->s_first_ino = EXT2_GOOD_OLD_FIRST_INO;
+		super->s_inode_size = EXT2_GOOD_OLD_INODE_SIZE;
 	}
 
 	set_field(s_checkinterval, EXT2_DFL_CHECKINTERVAL);
@@ -388,6 +391,10 @@
 				fs->group_desc[i].bg_flags |=
 					EXT2_BG_BLOCK_UNINIT;
 			fs->group_desc[i].bg_flags |= EXT2_BG_INODE_UNINIT;
+			numblocks = super->s_inodes_per_group;
+			if (i == 0)
+				numblocks -= super->s_first_ino;
+			fs->group_desc[i].bg_itable_unused = numblocks;
 		}
 		numblocks = ext2fs_reserve_super_and_bgd(fs, i, fs->block_map);