On Fri, Sep 27, 2013 at 01:37:24PM +0800, Zheng Liu wrote: > On Thu, Sep 26, 2013 at 05:03:28PM -0700, Darrick J. Wong wrote: > > A bg that's been flagged "corrupt" by definition has no free blocks, so that > > the allocator won't be tempted to use the damaged bg. Therefore, we shouldn't > > count the clusters in the damaged group when calculating free counts. > > > > Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > > --- > > fs/ext4/balloc.c | 7 ++++++- > > 1 file changed, 6 insertions(+), 1 deletion(-) > > > > > > diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c > > index dc5d572..4390f9f 100644 > > --- a/fs/ext4/balloc.c > > +++ b/fs/ext4/balloc.c > > @@ -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 > > It seems that you forgot to add these code in this macro definition. Oops, you're right, I did neglect the #if EXT4FS_DEBUG case. Thank you for catching that! --D > > diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c > index dc5d572..3ba2079 100644 > --- a/fs/ext4/balloc.c > +++ b/fs/ext4/balloc.c > @@ -655,7 +655,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) > > - Zheng > > > struct ext4_super_block *es; > > ext4_fsblk_t bitmap_count; > > @@ -679,7 +680,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; > > > > -- > > To unsubscribe from this list: send the line "unsubscribe linux-ext4" in > > the body of a message to majordomo@xxxxxxxxxxxxxxx > > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html