]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
resize2fs: don't require fsck to print min size
authorEric Sandeen <sandeen@sandeen.net>
Mon, 15 Dec 2014 00:08:59 +0000 (19:08 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 15 Dec 2014 00:12:01 +0000 (19:12 -0500)
My previous change ended up requiring that the filesystem
be fsck'd after the last mount, even if we are only querying
the minimum size.  This is a bit draconian, and it burned
the Fedora installer, which wants to calculate minimum size
for every filesystem in the box at install time, which in turn
requires a full fsck of every filesystem.

Try this one more time, and separate out the tests to make things
a bit more clear.  If we're only printing the min size, don't
require the fsck, as this is a bit less dangerous/critical.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
resize/main.c

index 983d8c25883a129002841cf86748e8b66609e85b..9a35af0272db432016c3f7327c754c8ab07557d5 100644 (file)
@@ -321,10 +321,30 @@ int main (int argc, char ** argv)
        }
        fs->default_bitmap_type = EXT2FS_BMAP64_RBTREE;
 
-       if (!(mount_flags & EXT2_MF_MOUNTED)) {
-               if (!force && ((fs->super->s_lastcheck < fs->super->s_mtime) ||
-                              (fs->super->s_state & EXT2_ERROR_FS) ||
-                              ((fs->super->s_state & EXT2_VALID_FS) == 0))) {
+       /*
+        * Before acting on an unmounted filesystem, make sure it's ok,
+        * unless the user is forcing it.
+        *
+        * We do ERROR and VALID checks even if we're only printing the
+        * minimimum size, because traversal of a badly damaged filesystem
+        * can cause issues as well.  We don't require it to be fscked after
+        * the last mount time in this case, though, as this is a bit less
+        * risky.
+        */
+       if (!force && !(mount_flags & EXT2_MF_MOUNTED)) {
+               int checkit = 0;
+
+               if (fs->super->s_state & EXT2_ERROR_FS)
+                       checkit = 1;
+
+               if ((fs->super->s_state & EXT2_VALID_FS) == 0)
+                       checkit = 1;
+
+               if ((fs->super->s_lastcheck < fs->super->s_mtime) &&
+                   !print_min_size)
+                       checkit = 1;
+
+               if (checkit) {
                        fprintf(stderr,
                                _("Please run 'e2fsck -f %s' first.\n\n"),
                                device_name);