Whamcloud - gitweb
LU-7304 ldiskfs: fix bug when bigalloc is enabled 32/16832/3
authorWang Shilong <wshilong@ddn.com>
Tue, 13 Oct 2015 00:28:29 +0000 (20:28 -0400)
committerOleg Drokin <oleg.drokin@intel.com>
Wed, 11 Nov 2015 15:11:31 +0000 (15:11 +0000)
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 <wshilong@ddn.com>
Change-Id: I7f61918918e6f4e2f372929181b704b0648dcbca
Reviewed-on: http://review.whamcloud.com/16832
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Yang Sheng <yang.sheng@intel.com>
Reviewed-by: James Simmons <uja.ornl@yahoo.com>
Reviewed-by: Jeff Mahoney <jeffm@suse.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
ldiskfs/kernel_patches/patches/rhel7/ext4-mballoc-extra-checks.patch
ldiskfs/kernel_patches/patches/sles12/ext4-prealloc.patch

index e207262..ac71448 100644 (file)
@@ -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);
index 394c3e9..914e338 100644 (file)
@@ -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++) {