| To: | Christoph Hellwig <hch@xxxxxx> |
|---|---|
| Subject: | [xfs-masters] Re: [PATCH] update sb->s_frozen when freezing read-only mounted device, too |
| From: | Akinobu Mita <akinobu.mita@xxxxxxxxx> |
| Date: | Thu, 11 Oct 2007 00:20:51 +0900 |
| Cc: | linux-kernel@xxxxxxxxxxxxxxx, xfs@xxxxxxxxxxx, Tim Shimmin <xfs-masters@xxxxxxxxxxx>, David Chinner <dgc@xxxxxxx> |
| Dkim-signature: | v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:date:from:to:cc:subject:message-id:mail-followup-to:references:mime-version:content-type:content-disposition:in-reply-to:user-agent; bh=VkL76X3GzFRZ+KeLjTsoHi5H6XnRq0riFB2JbUzTR7U=; b=OPvyaD7UT6vfcz8Yq+yI4cbrhtXQSzy9TeZqwh4lvbyq6DJEGEB7CEb6BGzFzrbeftU+EpVO+GAnbRSkZrjx7Zc+dy9OQIHODcUjCVuERWtSo7AAUlIGQjW+f5eNUJHFB4PV9UdXbhcJz4rwuFL6LsiMscjhQ/ornZ174Hv304g= |
| Domainkey-signature: | a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:date:from:to:cc:subject:message-id:mail-followup-to:references:mime-version:content-type:content-disposition:in-reply-to:user-agent; b=DeFllw/s5tPRw0dViD9krydVBtNUr0GSGGMMOkB5IfCiTyXzSLGmnRAVi5MmiuVzHfD4+0S0xs5SIztoQSoEVO7gJ61QINj1UDkBdkVA9P4T5AgazXwOU6NPbB/8ZowcYSWn6RXzSrqT42NPZxIgLEno80KMPFc3PWiM4/XmTug= |
| In-reply-to: | <961aa3350710050620q42eb6192wdacce1510cc76a4b@mail.gmail.com> |
| Mail-followup-to: | Akinobu Mita <akinobu.mita@xxxxxxxxx>, Christoph Hellwig <hch@xxxxxx>, linux-kernel@xxxxxxxxxxxxxxx, xfs@xxxxxxxxxxx, Tim Shimmin <xfs-masters@xxxxxxxxxxx>, David Chinner <dgc@xxxxxxx> |
| References: | <20070929100912.GB4121@APFDCB5C> <20071004202004.GA13316@lst.de> <961aa3350710050620q42eb6192wdacce1510cc76a4b@mail.gmail.com> |
| Reply-to: | xfs-masters@xxxxxxxxxxx |
| Sender: | xfs-masters-bounce@xxxxxxxxxxx |
| User-agent: | Mutt/1.4.2.3i |
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@xxxxxxx>
Cc: Tim Shimmin <xfs-masters@xxxxxxxxxxx>
Cc: Christoph Hellwig <hch@xxxxxx>
Signed-off-by: Akinobu Mita <akinobu.mita@xxxxxxxxx>
---
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 in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| ||
| Previous by Date: | [xfs-masters] - update-sb-s_frozen-when-freezing-read-only-mounted-device-too.patch removed from -mm tree, akpm |
|---|---|
| Next by Date: | [xfs-masters] Re: Interaction between Xen and XFS: stray RW mappings, Jeremy Fitzhardinge |
| Previous by Thread: | [xfs-masters] Re: [PATCH] update sb->s_frozen when freezing read-only mounted device, too, Akinobu Mita |
| Next by Thread: | [xfs-masters] It has already started, nieblas |
| Indexes: | [Date] [Thread] [Top] [All Lists] |