Resize2fs can't handle resizing flex_bg file systems that do not have the resize inode, but when the kernel adds support for resizing using the meta_bg layout, we should allow it be able to resize the file system. So move the flex_bg/resize_inode check to the just before we start doing the off-line resize, instead of doing it earlier where it would prohibit these file systems for both on-line and off-line resizes. Signed-off-by: "Theodore Ts'o" <tytso@xxxxxxx> --- resize/main.c | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/resize/main.c b/resize/main.c index f8bd983..67418ea 100644 --- a/resize/main.c +++ b/resize/main.c @@ -321,25 +321,6 @@ int main (int argc, char ** argv) exit(1); } - /* - * XXXX The combination of flex_bg and !resize_inode causes - * major problems for resize2fs, since when the group descriptors - * grow in size this can potentially require multiple inode - * tables to be moved aside to make room, and resize2fs chokes - * rather badly in this scenario. It's a rare combination, - * except when a filesystem is expanded more than a certain - * size, so for now, we'll just prohibit that combination. - * This is something we should fix eventually, though. - */ - if ((fs->super->s_feature_incompat & EXT4_FEATURE_INCOMPAT_FLEX_BG) && - !(fs->super->s_feature_compat & EXT2_FEATURE_COMPAT_RESIZE_INODE)) { - com_err(program_name, 0, _("%s: The combination of flex_bg " - "and\n\t!resize_inode features " - "is not supported by resize2fs.\n"), - device_name); - exit(1); - } - min_size = calculate_minimum_resize_size(fs); if (print_min_size) { @@ -463,6 +444,28 @@ int main (int argc, char ** argv) device_name); exit(1); } + /* + * XXXX The combination of flex_bg and !resize_inode + * causes major problems for resize2fs, since when the + * group descriptors grow in size this can potentially + * require multiple inode tables to be moved aside to + * make room, and resize2fs chokes rather badly in + * this scenario. It's a rare combination, except + * when a filesystem is expanded more than a certain + * size, so for now, we'll just prohibit that + * combination. This is something we should fix + * eventually, though. + */ + if ((fs->super->s_feature_incompat & + EXT4_FEATURE_INCOMPAT_FLEX_BG) && + !(fs->super->s_feature_compat & + EXT2_FEATURE_COMPAT_RESIZE_INODE)) { + com_err(program_name, 0, _("%s: The combination of " + "flex_bg and\n\t!resize_inode features " + "is not supported by resize2fs.\n"), + device_name); + exit(1); + } printf(_("Resizing the filesystem on " "%s to %llu (%dk) blocks.\n"), device_name, new_size, fs->blocksize / 1024); -- 1.7.12.rc0.22.gcdd159b -- 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