xfs-masters
[Top] [All Lists]

[xfs-masters] [PATCH] update sb->s_frozen when freezing read-only mounte

To: linux-kernel@xxxxxxxxxxxxxxx
Subject: [xfs-masters] [PATCH] update sb->s_frozen when freezing read-only mounted device, too
From: Akinobu Mita <akinobu.mita@xxxxxxxxx>
Date: Sat, 29 Sep 2007 19:09:12 +0900
Cc: xfs@xxxxxxxxxxx, Tim Shimmin <xfs-masters@xxxxxxxxxxx>, Christoph Hellwig <hch@xxxxxx>
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:mime-version:content-type:content-disposition:user-agent; bh=qWj4qXIgCF53XuQ/HFV2F4/z47EBN3sG5ySoPgtkhmE=; b=RFT/i0KHgkBnX9/qiynX8UEijTbOyKe7MW4ShRjo09ZYAMQoLqEmY7UngFfzL/8vT7fEII/UZ0yDiCL/krpelS9cwv8ZC67UExztKCcuLvib/rJZFPaHxsB4TTQ5p+fQSAk7/swbR6Q+wHzG+tRbuQl+FLaC4KM06B5HCKPJEE4=
Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:date:from:to:cc:subject:message-id:mail-followup-to:mime-version:content-type:content-disposition:user-agent; b=OL1EkPZ/ECU4KsA0NptE5jRaoZIJ6vzf/kyNx5LjCnC6uF/v5NH7/bFVHtL+ZzEkNrgnDdd6nHRqBJKKJmvhx4SUFJkLvwihbHIbZwwBBdbKBk9FtlqoeISAxenVi1t1x1jSGorXsOzLzj0wjTmAkB5uruopy3/98Dg/TvPgMhI=
Mail-followup-to: Akinobu Mita <akinobu.mita@xxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx, xfs@xxxxxxxxxxx, Tim Shimmin <xfs-masters@xxxxxxxxxxx>, Christoph Hellwig <hch@xxxxxx>
Reply-to: xfs-masters@xxxxxxxxxxx
Sender: xfs-masters-bounce@xxxxxxxxxxx
User-agent: Mutt/1.4.2.3i
freeze_bdev() with the device which is mounted as read only
does not change sb->s_frozen from SB_UNFROZEN to SB_FREEZE_TRANS.

Because of this behavior, xfs_freeze can break read-only XFS filesystem.

Because xfs_thaw does nothing for the filesystem whose sb->s_frozen is
SB_UNFROZEN. So freezed readonly XFS filesystem will never be unfreezed.
Then 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.

Cc:  Tim Shimmin <xfs-masters@xxxxxxxxxxx>
Cc: Christoph Hellwig <hch@xxxxxx>
Signed-off-by: Akinobu Mita <akinobu.mita@xxxxxxxxx>

---
 fs/buffer.c |   13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

Index: 2.6-git/fs/buffer.c
===================================================================
--- 2.6-git.orig/fs/buffer.c
+++ 2.6-git/fs/buffer.c
@@ -190,19 +190,22 @@ struct super_block *freeze_bdev(struct b
 
        down(&bdev->bd_mount_sem);
        sb = get_super(bdev);
-       if (sb && !(sb->s_flags & MS_RDONLY)) {
+       if (sb) {
                sb->s_frozen = SB_FREEZE_WRITE;
                smp_wmb();
 
-               __fsync_super(sb);
+               if (!(sb->s_flags & MS_RDONLY))
+                       __fsync_super(sb);
 
                sb->s_frozen = SB_FREEZE_TRANS;
                smp_wmb();
 
-               sync_blockdev(sb->s_bdev);
+               if (!(sb->s_flags & MS_RDONLY)) {
+                       sync_blockdev(sb->s_bdev);
 
-               if (sb->s_op->write_super_lockfs)
-                       sb->s_op->write_super_lockfs(sb);
+                       if (sb->s_op->write_super_lockfs)
+                               sb->s_op->write_super_lockfs(sb);
+               }
        }
 
        sync_blockdev(bdev);


<Prev in Thread] Current Thread [Next in Thread>
  • [xfs-masters] [PATCH] update sb->s_frozen when freezing read-only mounted device, too, Akinobu Mita <=