From: Akinobu Mita <akinobu.mita@gmail.com>
To: Christoph Hellwig <hch@lst.de>
Cc: linux-kernel@vger.kernel.org, xfs@oss.sgi.com,
Tim Shimmin <xfs-masters@oss.sgi.com>,
David Chinner <dgc@sgi.com>
Subject: Re: [PATCH] update sb->s_frozen when freezing read-only mounted device, too
Date: Thu, 11 Oct 2007 00:20:51 +0900 [thread overview]
Message-ID: <20071010152051.GA4059@APFDCB5C> (raw)
In-Reply-To: <961aa3350710050620q42eb6192wdacce1510cc76a4b@mail.gmail.com>
freeze_bdev() with read-only mounted device(*) does not change sb->s_frozen
from SB_UNFROZEN to SB_FREEZE_TRANS.
Because of this behavior, xfs_freeze can break read-only filesystem.
Because xfs_thaw does nothing for the filesystem whose sb->s_frozen is
SB_UNFROZEN. So frozen read-only XFS filesystem will never be unfrozen.
Thus we cannot do any unmount/remount operations for that filesystem.
This patch updates sb->s_frozen when freeze_bdev() is called for read-only
mounted device, too.
(*) freezing read-only filesystem is not so pointless. Because it can
prevent from someone trying to remount read/write while freezing.
Cc: David Chinner <dgc@sgi.com>
Cc: Tim Shimmin <xfs-masters@oss.sgi.com>
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
---
fs/buffer.c | 25 ++++++++++++++++---------
1 file changed, 16 insertions(+), 9 deletions(-)
Index: 2.6-git/fs/buffer.c
===================================================================
--- 2.6-git.orig/fs/buffer.c
+++ 2.6-git/fs/buffer.c
@@ -190,21 +190,28 @@ struct super_block *freeze_bdev(struct b
down(&bdev->bd_mount_sem);
sb = get_super(bdev);
- if (sb && !(sb->s_flags & MS_RDONLY)) {
- sb->s_frozen = SB_FREEZE_WRITE;
- smp_wmb();
-
- __fsync_super(sb);
+ if (!sb)
+ goto out;
+ if (sb->s_flags & MS_RDONLY) {
sb->s_frozen = SB_FREEZE_TRANS;
smp_wmb();
+ goto out;
+ }
- sync_blockdev(sb->s_bdev);
+ sb->s_frozen = SB_FREEZE_WRITE;
+ smp_wmb();
- if (sb->s_op->write_super_lockfs)
- sb->s_op->write_super_lockfs(sb);
- }
+ __fsync_super(sb);
+
+ sb->s_frozen = SB_FREEZE_TRANS;
+ smp_wmb();
+ sync_blockdev(sb->s_bdev);
+
+ if (sb->s_op->write_super_lockfs)
+ sb->s_op->write_super_lockfs(sb);
+out:
sync_blockdev(bdev);
return sb; /* thaw_bdev releases s->s_umount and bd_mount_sem */
}
prev parent reply other threads:[~2007-10-10 15:25 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-29 10:09 [PATCH] update sb->s_frozen when freezing read-only mounted device, too Akinobu Mita
2007-10-04 20:20 ` Christoph Hellwig
2007-10-05 13:20 ` Akinobu Mita
2007-10-10 15:20 ` Akinobu Mita [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=20071010152051.GA4059@APFDCB5C \
--to=akinobu.mita@gmail.com \
--cc=dgc@sgi.com \
--cc=hch@lst.de \
--cc=linux-kernel@vger.kernel.org \
--cc=xfs-masters@oss.sgi.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.