|
@@ -640,6 +640,7 @@ ext4_fsblk_t ext4_count_free_clusters(struct super_block *sb)
|
|
|
struct ext4_group_desc *gdp;
|
|
|
ext4_group_t i;
|
|
|
ext4_group_t ngroups = ext4_get_groups_count(sb);
|
|
|
+ struct ext4_group_info *grp;
|
|
|
#ifdef EXT4FS_DEBUG
|
|
|
struct ext4_super_block *es;
|
|
|
ext4_fsblk_t bitmap_count;
|
|
@@ -655,7 +656,11 @@ ext4_fsblk_t ext4_count_free_clusters(struct super_block *sb)
|
|
|
gdp = ext4_get_group_desc(sb, i, NULL);
|
|
|
if (!gdp)
|
|
|
continue;
|
|
|
- desc_count += ext4_free_group_clusters(sb, gdp);
|
|
|
+ grp = NULL;
|
|
|
+ if (EXT4_SB(sb)->s_group_info)
|
|
|
+ grp = ext4_get_group_info(sb, i);
|
|
|
+ if (!grp || !EXT4_MB_GRP_BBITMAP_CORRUPT(grp))
|
|
|
+ desc_count += ext4_free_group_clusters(sb, gdp);
|
|
|
brelse(bitmap_bh);
|
|
|
bitmap_bh = ext4_read_block_bitmap(sb, i);
|
|
|
if (bitmap_bh == NULL)
|
|
@@ -679,7 +684,11 @@ ext4_fsblk_t ext4_count_free_clusters(struct super_block *sb)
|
|
|
gdp = ext4_get_group_desc(sb, i, NULL);
|
|
|
if (!gdp)
|
|
|
continue;
|
|
|
- desc_count += ext4_free_group_clusters(sb, gdp);
|
|
|
+ grp = NULL;
|
|
|
+ if (EXT4_SB(sb)->s_group_info)
|
|
|
+ grp = ext4_get_group_info(sb, i);
|
|
|
+ if (!grp || !EXT4_MB_GRP_BBITMAP_CORRUPT(grp))
|
|
|
+ desc_count += ext4_free_group_clusters(sb, gdp);
|
|
|
}
|
|
|
|
|
|
return desc_count;
|