diff mbox

resize2fs: don't require fsck to print min size

Message ID 5488649C.8020809@sandeen.net
State Accepted, archived
Headers show

Commit Message

Eric Sandeen Dec. 10, 2014, 3:19 p.m. UTC
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>
---


--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Theodore Ts'o Dec. 15, 2014, 12:12 a.m. UTC | #1
On Wed, Dec 10, 2014 at 09:19:56AM -0600, Eric Sandeen wrote:
> 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>

Applied with a minor whitespace fixup, thanks.

				- Ted
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/resize/main.c b/resize/main.c
index 983d8c2..d40a741 100644
--- a/resize/main.c
+++ b/resize/main.c
@@ -321,10 +321,31 @@  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) {
+			if (!print_min_size)
+				checkit = 1;
+		}
+
+		if (checkit) {
 			fprintf(stderr,
 				_("Please run 'e2fsck -f %s' first.\n\n"),
 				device_name);