Patchwork e2fsck: allow checking on mounted root fs (v2)

login
register
mail settings
Submitter Andreas Dilger
Date May 30, 2012, 10:55 p.m.
Message ID <1338418504-3408-1-git-send-email-adilger@whamcloud.com>
Download mbox | patch
Permalink /patch/162094/
State Accepted
Headers show

Comments

Andreas Dilger - May 30, 2012, 10:55 p.m.
Commit 732e26b98e5c79a4298dbe341f43b54b354bb241 added checks to
prevent e2fsck from being run in filesystem-modifying mode against
a mounted or otherwise busy device, due to several bug reports of
users doing this even with the verbose warnings in check_mount().

However, it also prevented e2fsck from checking a mounted root
filesystem, which will prevent the node from booting.  Once again
allow e2fsck to run against the mounted root filesystem if it is
also mounted read-only at the time.

Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
---
 e2fsck/unix.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)
Theodore Ts'o - May 31, 2012, 9:35 p.m.
On Wed, May 30, 2012 at 04:55:04PM -0600, Andreas Dilger wrote:
> Commit 732e26b98e5c79a4298dbe341f43b54b354bb241 added checks to
> prevent e2fsck from being run in filesystem-modifying mode against
> a mounted or otherwise busy device, due to several bug reports of
> users doing this even with the verbose warnings in check_mount().
> 
> However, it also prevented e2fsck from checking a mounted root
> filesystem, which will prevent the node from booting.  Once again
> allow e2fsck to run against the mounted root filesystem if it is
> also mounted read-only at the time.
> 
> Signed-off-by: Andreas Dilger <adilger@whamcloud.com>

Thanks, applied.

						- 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

Patch

diff --git a/e2fsck/unix.c b/e2fsck/unix.c
index 6161e46..94260bd 100644
--- a/e2fsck/unix.c
+++ b/e2fsck/unix.c
@@ -1221,8 +1221,12 @@  restart:
 			    &old_bitmaps);
 	if (!old_bitmaps)
 		flags |= EXT2_FLAG_64BITS;
-	if ((ctx->options & E2F_OPT_READONLY) == 0)
-		flags |= EXT2_FLAG_RW | EXT2_FLAG_EXCLUSIVE;
+	if ((ctx->options & E2F_OPT_READONLY) == 0) {
+		flags |= EXT2_FLAG_RW;
+		if (!(ctx->mount_flags & EXT2_MF_ISROOT &&
+		      ctx->mount_flags & EXT2_MF_READONLY))
+			flags |= EXT2_FLAG_EXCLUSIVE;
+	}
 
 	retval = try_open_fs(ctx, flags, io_ptr, &fs);