From 2273a17ae8161475a9cb006f923aeb037288046a Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Sun, 14 Dec 2014 21:10:35 -0500 Subject: [PATCH] resize2fs: don't interpret bitmap shift while crossing flexbg as raid stride resize2fs tries to infer the RAID stride by observing differences between the locations of adjacent block groups' block and inode bitmaps within the block group. If the two block groups being compared belong to different flexbgs, however, it'll be fooled by the large offset into thinking that the FS has an abnormally large RAID stride. Therefore, teach it not to get confused by crossing a flexbg. Signed-off-by: Darrick J. Wong Reported-by: TR Reardon Signed-off-by: Theodore Ts'o --- resize/main.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/resize/main.c b/resize/main.c index 9a35af0..e8ff8f0 100644 --- a/resize/main.c +++ b/resize/main.c @@ -105,6 +105,7 @@ static void determine_fs_stride(ext2_filsys fs) unsigned long long sum; unsigned int has_sb, prev_has_sb = 0, num; int i_stride, b_stride; + int flexbg_size = 1 << fs->super->s_log_groups_per_flex; if (fs->stride) return; @@ -120,7 +121,8 @@ static void determine_fs_stride(ext2_filsys fs) ext2fs_inode_bitmap_loc(fs, group - 1) - fs->super->s_blocks_per_group; if (b_stride != i_stride || - b_stride < 0) + b_stride < 0 || + (flexbg_size > 1 && (group % flexbg_size == 0))) goto next; /* printf("group %d has stride %d\n", group, b_stride); */ -- 1.8.3.1