public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: "Nathaniel W. Turner" <nate@houseofnate.net>
To: xfs@oss.sgi.com
Subject: Re: [PATCH] xfs_repair: open filesystem device exclusively
Date: Sun, 08 Mar 2009 23:50:02 -0400	[thread overview]
Message-ID: <49B491EA.4090003@houseofnate.net> (raw)
In-Reply-To: <49B48B8E.3030602@houseofnate.net>

I forgot to mention that this is against xfsprogs 3.0.0.  Also, the
indentation was a bit messed up on that last post, so here's the patch
again (all 2 lines of it):

----

I'm sure there is a better way to fix this, but without this patch, two
xfs_repair processes will happily operate on the same filesystem device
at the same time.  It is also possible to mount a filesystem that is in
the process of being repaired.

This seems like it's probably not ideal, so this patch just modifies
xfs_repair to open the filesystem device with O_EXCL unless it was
invoked in "no modify" or "dangerous" mode.

The net effect is that a 2nd xfs_repair will now safely fail with
"xfs_repair: cannot open /dev/foo: Device or resource busy", and a mount
command will fail with (the slightly cryptic) "mount: /dev/foo already
mounted or /mountpoint busy".

Note that this has no effect if the filesystem is stored in a regular
file instead of on a block device.

(Error messages could probably be improved to be more user-friendly in
this new failure case, and it probably wouldn't hurt to add a BLKROGET
ioctl to check for read-only block devices with read-write permissions,
but this does the job for me.)

Signed-off-by: Nathaniel W. Turner <nate@houseofnate.net>
---
 repair/init.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/repair/init.c b/repair/init.c
index 8e508c4..7e5052c 100644
--- a/repair/init.c
+++ b/repair/init.c
@@ -142,6 +142,8 @@ xfs_init(libxfs_init_t *args)
         args->isreadonly = (LIBXFS_ISREADONLY | LIBXFS_ISINACTIVE);
     else if (dangerously)
         args->isreadonly = (LIBXFS_ISINACTIVE | LIBXFS_DANGEROUSLY);
+    else
+        args->isreadonly = LIBXFS_EXCLUSIVELY;
 
     if (!libxfs_init(args))
         do_error(_("couldn't initialize XFS library\n"));

-- 
Nathaniel W. Turner
http://houseofnate.net/

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  reply	other threads:[~2009-03-09  3:50 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-09  3:22 [PATCH] xfs_repair: open filesystem device exclusively Nathaniel W. Turner
2009-03-09  3:50 ` Nathaniel W. Turner [this message]
2009-03-16 21:23   ` Christoph Hellwig
2009-05-07  2:46     ` Nathaniel W. Turner
2009-05-10 18:03       ` Christoph Hellwig
2009-05-07  2:55   ` Eric Sandeen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=49B491EA.4090003@houseofnate.net \
    --to=nate@houseofnate.net \
    --cc=xfs@oss.sgi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox