liubo
2010-Dec-01 10:20 UTC
[RFC PATCH 2/4 v2] Btrfs: avoid transaction stuff when readonly
When the filesystem is readonly, avoid transaction stuff by checking MS_RDONLY at start transaction time. Signed-off-by: Liu Bo <liubo2009@cn.fujitsu.com> --- fs/btrfs/transaction.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index 1fffbc0..14a597d 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -181,6 +181,9 @@ static struct btrfs_trans_handle *start_transaction(struct btrfs_root *root, struct btrfs_trans_handle *h; struct btrfs_transaction *cur_trans; int ret; + + if (root->fs_info->sb->s_flags & MS_RDONLY) + return ERR_PTR(-EROFS); again: h = kmem_cache_alloc(btrfs_trans_handle_cachep, GFP_NOFS); if (!h) -- 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
liubo
2010-Dec-02 03:42 UTC
Re: [RFC PATCH 2/4 v2] Btrfs: avoid transaction stuff when readonly
On 12/01/2010 06:20 PM, liubo wrote:> When the filesystem is readonly, avoid transaction stuff by checking MS_RDONLY at > start transaction time. >This patch may lead btrfs panic. Since btrfs allows transaction under readonly fs state, which is a bit weird, btrfs does not even check the returned transaction from start_transaction, although it may return -ENOMEM. With this patch, if btrfs flips readonly or is mounted readonly, to start a transaction will get a -EROFS. So we needs to check transaction more carefully, rather than just leave it alone. thanks, Liu Bo> Signed-off-by: Liu Bo <liubo2009@cn.fujitsu.com> > --- > fs/btrfs/transaction.c | 3 +++ > 1 files changed, 3 insertions(+), 0 deletions(-) > > diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c > index 1fffbc0..14a597d 100644 > --- a/fs/btrfs/transaction.c > +++ b/fs/btrfs/transaction.c > @@ -181,6 +181,9 @@ static struct btrfs_trans_handle *start_transaction(struct btrfs_root *root, > struct btrfs_trans_handle *h; > struct btrfs_transaction *cur_trans; > int ret; > + > + if (root->fs_info->sb->s_flags & MS_RDONLY) > + return ERR_PTR(-EROFS); > again: > h = kmem_cache_alloc(btrfs_trans_handle_cachep, GFP_NOFS); > if (!h)-- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Yan, Zheng
2010-Dec-02 04:28 UTC
Re: [RFC PATCH 2/4 v2] Btrfs: avoid transaction stuff when readonly
On Thu, Dec 2, 2010 at 11:42 AM, liubo <liubo2009@cn.fujitsu.com> wrote:> On 12/01/2010 06:20 PM, liubo wrote: >> When the filesystem is readonly, avoid transaction stuff by checking MS_RDONLY at >> start transaction time. >> > > This patch may lead btrfs panic. > > Since btrfs allows transaction under readonly fs state, which is a bit weird, btrfs > does not even check the returned transaction from start_transaction, although it may > return -ENOMEM.btrfs may do log replay even mount as readonly. -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
liubo
2010-Dec-02 05:38 UTC
Re: [RFC PATCH 2/4 v2] Btrfs: avoid transaction stuff when readonly
On 12/02/2010 12:28 PM, Yan, Zheng wrote:> On Thu, Dec 2, 2010 at 11:42 AM, liubo <liubo2009@cn.fujitsu.com> wrote: >> On 12/01/2010 06:20 PM, liubo wrote: >>> When the filesystem is readonly, avoid transaction stuff by checking MS_RDONLY at >>> start transaction time. >>> >> This patch may lead btrfs panic. >> >> Since btrfs allows transaction under readonly fs state, which is a bit weird, btrfs >> does not even check the returned transaction from start_transaction, although it may >> return -ENOMEM. > > btrfs may do log replay even mount as readonly.Yeah, it it right. log replay maybe does take place when btrfs is mounted as readonly, but after the FS is broken, is btrfs willing to do log replay in such case? thanks, Liu Bo> -- > To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html >-- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Mike Fedyk
2010-Dec-02 05:41 UTC
Re: [RFC PATCH 2/4 v2] Btrfs: avoid transaction stuff when readonly
On Wed, Dec 1, 2010 at 8:28 PM, Yan, Zheng <yanzheng@21cn.com> wrote:> On Thu, Dec 2, 2010 at 11:42 AM, liubo <liubo2009@cn.fujitsu.com> wrote: >> On 12/01/2010 06:20 PM, liubo wrote: >>> When the filesystem is readonly, avoid transaction stuff by checking MS_RDONLY at >>> start transaction time. >>> >> >> This patch may lead btrfs panic. >> >> Since btrfs allows transaction under readonly fs state, which is a bit weird, btrfs >> does not even check the returned transaction from start_transaction, although it may >> return -ENOMEM. > > btrfs may do log replay even mount as readonly. >What part is logged besides tree roots and/or superblocks? -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
liubo
2010-Dec-02 06:36 UTC
Re: [RFC PATCH 2/4 v2] Btrfs: avoid transaction stuff when readonly
On 12/02/2010 01:41 PM, Mike Fedyk wrote:> On Wed, Dec 1, 2010 at 8:28 PM, Yan, Zheng <yanzheng@21cn.com> wrote: >> On Thu, Dec 2, 2010 at 11:42 AM, liubo <liubo2009@cn.fujitsu.com> wrote: >>> On 12/01/2010 06:20 PM, liubo wrote: >>>> When the filesystem is readonly, avoid transaction stuff by checking MS_RDONLY at >>>> start transaction time. >>>> >>> This patch may lead btrfs panic. >>> >>> Since btrfs allows transaction under readonly fs state, which is a bit weird, btrfs >>> does not even check the returned transaction from start_transaction, although it may >>> return -ENOMEM. >> btrfs may do log replay even mount as readonly. >> > > What part is logged besides tree roots and/or superblocks?log tree is used for log replay after crash and fast fsync and O_SYNC, it logs inodes.> -- > To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html >-- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html