From d11736c6ddcd6e687d857bd902ed772311cd66bc Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Tue, 22 Apr 2008 23:22:17 -0400 Subject: [PATCH] ext2fs_open_inode_scan: Handle an non-zero bg_itable_used in block group 0 Previously, the portion of the inode table for block group 0 was always completely zero'ed out, so the ext2fs_open_inode_scan() didn't handle a non-zero bg_itable_used value for the first block group. Fix this. Signed-off-by: "Theodore Ts'o" --- lib/ext2fs/inode.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/ext2fs/inode.c b/lib/ext2fs/inode.c index d9150fbf..89084237 100644 --- a/lib/ext2fs/inode.c +++ b/lib/ext2fs/inode.c @@ -146,6 +146,15 @@ errcode_t ext2fs_open_inode_scan(ext2_filsys fs, int buffer_blocks, group_desc[scan->current_group].bg_inode_table; scan->inodes_left = EXT2_INODES_PER_GROUP(scan->fs->super); scan->blocks_left = scan->fs->inode_blocks_per_group; + if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super, + EXT4_FEATURE_RO_COMPAT_GDT_CSUM)) { + scan->inodes_left -= + fs->group_desc[scan->current_group].bg_itable_unused; + scan->blocks_left = + (scan->inodes_left + + (fs->blocksize / scan->inode_size - 1)) * + scan->inode_size / fs->blocksize; + } retval = ext2fs_get_array(scan->inode_buffer_blocks, fs->blocksize, &scan->inode_buffer);