From: David Chinner <dgc@sgi.com>
To: David Greaves <david@dgreaves.com>
Cc: xfs@oss.sgi.com,
"'linux-kernel@vger.kernel.org'" <linux-kernel@vger.kernel.org>,
David Chinner <dgc@sgi.com>
Subject: Re: xfs freeze/umount problem
Date: Wed, 20 Jun 2007 10:01:09 +1000 [thread overview]
Message-ID: <20070620000109.GU86004887@sgi.com> (raw)
In-Reply-To: <46778F60.5090107@dgreaves.com>
On Tue, Jun 19, 2007 at 09:10:08AM +0100, David Greaves wrote:
> David Chinner wrote:
> > FWIW, I'm on record stating that "sync" is not sufficient to quiesce an
> XFS
> > filesystem for a suspend/resume to work safely and have argued that the
> only
> > safe thing to do is freeze the filesystem before suspend and thaw it after
> > resume.
>
> Whilst testing a potential bug in another thread I accidentally found that
> unmounting a filesystem that I'd just frozen would hang.
>
> As the saying goes: "Well, duh!!"
<grin>
It's the s_umount semaphore that is the problem here - freeze_bdev()
does a get_super() call which does a down_read(&sb->s_umount) and
the corresponding up_read() call does not occur until the filesystem
is thawed.
So yes, your umount will hang until you thaw the fileystem.
As i just tried this, I can't unfreeze the filesystem because it's
been removed from /proc/mounts already and so xfs_freeze -u aborts:
budgie:~ # xfs_freeze -u /dev/sdb8
xfs_freeze: specified file ["/dev/sdb8"] is not on an XFS filesystem
budgie:~ #
> I could eventually run an unfreeze but the mount was still hung. This lead
> to an unclean shutdown.
So I couldn't reproduce the unclean shutdown.
> OK, it may not be bright but it seems like this shouldn't happen; umount
> should either unfreeze and work or fail ("Attempt to umount a frozen
> filesystem.") if the fs is frozen.
IMO, an unmount of a frozen fileystem should simply return EBUSY.
> Is this a kernel bug/misfeature or a (u)mount one?
Kernel bug. umount should know nothing about frozen filesystems...
Maybe something like th patch below needs to be done to prvent
the hang....
Cheers,
Dave.
--
Dave Chinner
Principal Engineer
SGI Australian Software Group
Don't try to unmount a frozen filesystem as the unmount will hang
waiting on the s_umount semaphore held by the freeze and you may not
be able to unfreeze the filesystem to allow the umount to proceed.
Signed-Off-By: Dave Chinner <dgc@sgi.com>
---
fs/namespace.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: 2.6.x-xfs-new/fs/namespace.c
===================================================================
--- 2.6.x-xfs-new.orig/fs/namespace.c 2007-05-29 16:17:59.000000000 +1000
+++ 2.6.x-xfs-new/fs/namespace.c 2007-06-20 09:57:21.310048007 +1000
@@ -545,6 +545,13 @@ static int do_umount(struct vfsmount *mn
int retval;
LIST_HEAD(umount_list);
+ /*
+ * don't try to unmount frozen filesystems as we'll
+ * hang on the s_umount held by the freeze a bit later.
+ */
+ if (sb->s_frozen != SB_UNFROZEN)
+ return -EBUSY;
+
retval = security_sb_umount(mnt, flags);
if (retval)
return retval;
prev parent reply other threads:[~2007-06-20 0:01 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-19 8:10 xfs freeze/umount problem David Greaves
2007-06-20 0:01 ` David Chinner [this message]
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=20070620000109.GU86004887@sgi.com \
--to=dgc@sgi.com \
--cc=david@dgreaves.com \
--cc=linux-kernel@vger.kernel.org \
--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