OSDN Git Service

resize2fs: Prohibit the combination of flex_bg and !resize_inode
authorTheodore Ts'o <tytso@mit.edu>
Tue, 17 Jun 2008 05:53:53 +0000 (01:53 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 17 Jun 2008 05:53:53 +0000 (01:53 -0400)
This is a potentially a difficult case for resize2fs to handle, so
prohibit it for now.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
resize/main.c

index d7097ad..1cb0b20 100644 (file)
@@ -316,9 +316,28 @@ int main (int argc, char ** argv)
                        "(%s)", 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);
+       }
        
        if (print_min_size) {
-               printf("Estimated minimum size of the filesystem: %u\n",
+               printf(_("Estimated minimum size of the filesystem: %u\n"),
                       calculate_minimum_resize_size(fs));
                exit(0);
        }