xfs-masters
[Top] [All Lists]

[xfs-masters] Re: [PATCH] update sb->s_frozen when freezing read-only mo

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: Fri, 5 Oct 2007 22:20:55 +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:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; bh=4NwBUwBtsLo3dgUa9Vfg94G6DNIyE07Y/sS/i0zoi48=; b=kvKDmrBvMKl/gNredAoY21rqgtClfVg6HR8K0hzUllHXVvlJz0nh+cA5Qd+iVC/lWrn359TUvhHWFJMtHWvmIAFGfvdi76pNuapNwjsK4z75f6F7FUCIKigpgtSq+t+gZs2Z+ZOhbuLkyylLW84oNnXSGMUSmKURecm9SvlCdJs=
Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=ETZ5QlALR7V+C2hjWcC3L9+nHdGqkSpiWBwFql8OkaEf4XTyyqRjhA4KJjgNDz5bkDChYPix/eRCBHkNdyINB0NkimL/eYAvq0c1+7Y5FmNXXG3X3Beb8waPbqzdUgReyj3mbofGfYH06Nahv9K89vIQBfENgjZfCYzFmF8ulyE=
In-reply-to: <20071004202004.GA13316@lst.de>
References: <20070929100912.GB4121@APFDCB5C> <20071004202004.GA13316@lst.de>
Reply-to: xfs-masters@xxxxxxxxxxx
Sender: xfs-masters-bounce@xxxxxxxxxxx
2007/10/5, Christoph Hellwig <hch@xxxxxx>:
> On Sat, Sep 29, 2007 at 07:09:12PM +0900, Akinobu Mita wrote:
> > 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.
>
> I think this fix is valid, but it might be a tad cleaner to just
> set s_frozen to SB_FREEZE_TRANS directly in a separate branch, ala:

It looks cleaner than mine. I'll resubmit it.

> struct super_block *freeze_bdev(struct block_device *bdev)
> {
>         struct super_block *sb;
>
>         down(&bdev->bd_mount_sem);
>         sb = get_super(bdev);
>         if (!sb)
>                 goto out;
>
>         if (sb->s_flags & MS_RDONLY) {
>                 sb->s_frozen = SB_FREEZE_TRANS;
>                 smp_wmb();
>                 goto out;
>         }
>
>         sb->s_frozen = SB_FREEZE_WRITE;
>         smp_wmb();
>
>         __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>