[U-Boot] [PATCH v3 07/13] ext4: only update number of of unused inodes if GDT_CSUM feature is set

e2fsck warns about "Group descriptor 0 marked uninitialized without feature set." The bg_itable_unused field is only defined if FEATURE_RO_COMPAT_GDT_CSUM is set, and should be set (kept) zero otherwise.
Signed-off-by: Stefan Brüns stefan.bruens@rwth-aachen.de --- fs/ext4/ext4_common.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
v3: Patch added to series
diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c index eae23b7..0018937 100644 --- a/fs/ext4/ext4_common.c +++ b/fs/ext4/ext4_common.c @@ -980,12 +980,13 @@ int ext4fs_get_new_inode_no(void) if (!journal_buffer || !zero_buffer) goto fail; struct ext2_block_group *bgd = (struct ext2_block_group *)fs->gdtable; + int has_gdt_chksum = le32_to_cpu(fs->sb->feature_ro_compat) & + EXT4_FEATURE_RO_COMPAT_GDT_CSUM ? 1 : 0;
if (fs->first_pass_ibmap == 0) { for (i = 0; i < fs->no_blkgrp; i++) { if (bgd[i].free_inodes) { - if (bgd[i].bg_itable_unused != - bgd[i].free_inodes) + if (has_gdt_chksum) bgd[i].bg_itable_unused = bgd[i].free_inodes; if (le16_to_cpu(bgd[i].bg_flags) & EXT4_BG_INODE_UNINIT) { @@ -1006,7 +1007,8 @@ int ext4fs_get_new_inode_no(void) (i * inodes_per_grp); fs->first_pass_ibmap++; ext4fs_bg_free_inodes_dec(&bgd[i]); - ext4fs_bg_itable_unused_dec(&bgd[i]); + if (has_gdt_chksum) + ext4fs_bg_itable_unused_dec(&bgd[i]); ext4fs_sb_free_inodes_dec(fs->sb); status = ext4fs_devread( (lbaint_t)le32_to_cpu(bgd[i].inode_id) * @@ -1061,12 +1063,10 @@ restart: goto fail; prev_inode_bitmap_index = ibmap_idx; } - if (bgd[ibmap_idx].bg_itable_unused != - bgd[ibmap_idx].free_inodes) + ext4fs_bg_free_inodes_dec(&bgd[ibmap_idx]); + if (has_gdt_chksum) bgd[ibmap_idx].bg_itable_unused = bgd[ibmap_idx].free_inodes; - ext4fs_bg_free_inodes_dec(&bgd[ibmap_idx]); - ext4fs_bg_itable_unused_dec(&bgd[ibmap_idx]); ext4fs_sb_free_inodes_dec(fs->sb); goto success; }

Hi Stefan,
e2fsck warns about "Group descriptor 0 marked uninitialized without feature set." The bg_itable_unused field is only defined if FEATURE_RO_COMPAT_GDT_CSUM is set, and should be set (kept) zero otherwise.
Signed-off-by: Stefan Brüns stefan.bruens@rwth-aachen.de
fs/ext4/ext4_common.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
v3: Patch added to series
diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c index eae23b7..0018937 100644 --- a/fs/ext4/ext4_common.c +++ b/fs/ext4/ext4_common.c @@ -980,12 +980,13 @@ int ext4fs_get_new_inode_no(void) if (!journal_buffer || !zero_buffer) goto fail; struct ext2_block_group *bgd = (struct ext2_block_group *)fs->gdtable;
int has_gdt_chksum = le32_to_cpu(fs->sb->feature_ro_compat) &
EXT4_FEATURE_RO_COMPAT_GDT_CSUM ? 1 : 0;
if (fs->first_pass_ibmap == 0) { for (i = 0; i < fs->no_blkgrp; i++) { if (bgd[i].free_inodes) {
if (bgd[i].bg_itable_unused !=
bgd[i].free_inodes)
if (has_gdt_chksum) bgd[i].bg_itable_unused = bgd[i].free_inodes; if (le16_to_cpu(bgd[i].bg_flags) &
EXT4_BG_INODE_UNINIT) { @@ -1006,7 +1007,8 @@ int ext4fs_get_new_inode_no(void) (i * inodes_per_grp); fs->first_pass_ibmap++; ext4fs_bg_free_inodes_dec(&bgd[i]);
ext4fs_bg_itable_unused_dec(&bgd[i]);
if (has_gdt_chksum)
ext4fs_bg_itable_unused_dec(&bgd[i]); ext4fs_sb_free_inodes_dec(fs->sb); status = ext4fs_devread( (lbaint_t)le32_to_cpu(bgd[i].inode_id)
- @@ -1061,12 +1063,10 @@ restart: goto fail; prev_inode_bitmap_index = ibmap_idx; }
if (bgd[ibmap_idx].bg_itable_unused !=
bgd[ibmap_idx].free_inodes)
ext4fs_bg_free_inodes_dec(&bgd[ibmap_idx]);
if (has_gdt_chksum) bgd[ibmap_idx].bg_itable_unused = bgd[ibmap_idx].free_inodes;
ext4fs_bg_free_inodes_dec(&bgd[ibmap_idx]);
ext4fs_sb_free_inodes_dec(fs->sb); goto success; }ext4fs_bg_itable_unused_dec(&bgd[ibmap_idx]);
Reviewed-by: Lukasz Majewski l.majewski@samsung.com
participants (2)
-
Lukasz Majewski
-
Stefan Brüns