From: Wang Shilong Date: Tue, 13 Oct 2015 00:28:29 +0000 (-0400) Subject: LU-7304 ldiskfs: fix bug when bigalloc is enabled X-Git-Tag: 2.7.63~19 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=26adc2e13a877507b483b2d3c3e873fbd13d2596;p=fs%2Flustre-release.git LU-7304 ldiskfs: fix bug when bigalloc is enabled See following error when enabled bigalloc feature for ldiskfs rhel7: LDISKFS-fs error (device sdb): ldiskfs_mb_check_ondisk_bitmap:3611: comm mkdir: on-disk bitmap for group 8corrupted: 0 blocks free in bitmap, 32768 - in gd Fixed to use EXT4_CLUSTERS_PER_GROUP, otherwise, we will get wrong value and fail to check, which make FS become RO.. Signed-off-by: Wang Shilong Change-Id: I7f61918918e6f4e2f372929181b704b0648dcbca Reviewed-on: http://review.whamcloud.com/16832 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Yang Sheng Reviewed-by: James Simmons Reviewed-by: Jeff Mahoney Reviewed-by: Oleg Drokin --- diff --git a/ldiskfs/kernel_patches/patches/rhel7/ext4-mballoc-extra-checks.patch b/ldiskfs/kernel_patches/patches/rhel7/ext4-mballoc-extra-checks.patch index e207262..ac71448 100644 --- a/ldiskfs/kernel_patches/patches/rhel7/ext4-mballoc-extra-checks.patch +++ b/ldiskfs/kernel_patches/patches/rhel7/ext4-mballoc-extra-checks.patch @@ -164,7 +164,7 @@ Index: linux-3.10.0-123.el7.x86_64/fs/ext4/mballoc.c +int ext4_mb_check_ondisk_bitmap(struct super_block *sb, void *bitmap, + struct ext4_group_desc *gdp, int group) +{ -+ unsigned short max = EXT4_BLOCKS_PER_GROUP(sb); ++ unsigned short max = EXT4_CLUSTERS_PER_GROUP(sb); + unsigned short i, first, free = 0; + + i = mb_find_next_zero_bit(bitmap, max, 0); diff --git a/ldiskfs/kernel_patches/patches/sles12/ext4-prealloc.patch b/ldiskfs/kernel_patches/patches/sles12/ext4-prealloc.patch index 394c3e9..914e338 100644 --- a/ldiskfs/kernel_patches/patches/sles12/ext4-prealloc.patch +++ b/ldiskfs/kernel_patches/patches/sles12/ext4-prealloc.patch @@ -30,7 +30,7 @@ Index: linux-3.12.39-47.1/fs/ext4/mballoc.c +{ + int i; + -+ if (value > (sbi->s_blocks_per_group - 1 - 1 - sbi->s_itb_per_group)) ++ if (value > (sbi->s_clusters_per_group - 1 - 1 - sbi->s_itb_per_group)) + return; + + for (i = 0; i < sbi->s_mb_prealloc_table_size; i++) {