[Ocfs2-tools-devel] [PATCH 3/3] fsck.ocfs2: Detect locally mounted volume
Sunil Mushran
sunil.mushran at oracle.com
Mon Jul 27 13:29:15 PDT 2009
Detect if the volume is mounted locally. If so, warn the user of
the consequences of running fsck on a mounted volume.
Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com>
---
fsck.ocfs2/fsck.c | 38 ++++++++++++++++++++++++++++++++------
1 files changed, 32 insertions(+), 6 deletions(-)
diff --git a/fsck.ocfs2/fsck.c b/fsck.ocfs2/fsck.c
index ae1031f..5f1f2d1 100644
--- a/fsck.ocfs2/fsck.c
+++ b/fsck.ocfs2/fsck.c
@@ -637,6 +637,8 @@ int main(int argc, char **argv)
int fsck_mask = FSCK_OK;
int slot_recover_err = 0;
errcode_t ret;
+ int mount_flags;
+ int proceed = 1;
memset(ost, 0, sizeof(o2fsck_state));
ost->ost_ask = 1;
@@ -746,12 +748,36 @@ int main(int argc, char **argv)
print_version();
- if (ost->ost_skip_o2cb) {
- fprintf(stdout, "\nWARNING: YOU HAVE DISABLED THE CLUSTER CHECK. "
- "CONTINUE ONLY IF YOU\nARE ABSOLUTELY SURE THAT NO "
- "NODE HAS THIS FILESYSTEM MOUNTED OR IS\nOTHERWISE "
- "ACCESSING IT. IF UNSURE, DO NOT PROCEED.\n\n");
- fprintf(stdout, "Proceed (y/N): ");
+ ret = ocfs2_check_if_mounted(filename, &mount_flags);
+ if (ret) {
+ com_err(whoami, ret, "while determining whether %s is mounted.",
+ filename);
+ fsck_mask |= FSCK_ERROR;
+ goto out;
+ }
+
+ if (mount_flags & (OCFS2_MF_MOUNTED | OCFS2_MF_BUSY)) {
+ if (!(open_flags & OCFS2_FLAG_RW))
+ fprintf(stdout, "\nWARNING!!! Running fsck.ocfs2 (read-"
+ "only) on a mounted filesystem may detect "
+ "invalid errors.\n\n");
+ else
+ fprintf(stdout, "\nWARNING!!! Running fsck.ocfs2 on a "
+ "mounted filesystem may cause SEVERE "
+ "filesystem damage.\n\n");
+ proceed = 0;
+ }
+
+ if (proceed && ost->ost_skip_o2cb) {
+ fprintf(stdout, "\nWARNING!!! You have disabled the cluster check. "
+ "Continue only if you\nare absolutely sure that NO "
+ "node has this filesystem mounted or is\notherwise "
+ "accessing it. If unsure, do NOT continue.\n\n");
+ proceed = 0;
+ }
+
+ if (!proceed) {
+ fprintf(stdout, "Do you really want to continue (y/N): ");
if (toupper(getchar()) != 'Y') {
printf("Aborting operation.\n");
fsck_mask |= FSCK_CANCELED;
--
1.6.0.4
More information about the Ocfs2-tools-devel
mailing list