Younger Liu
2013-Sep-22 10:51 UTC
[Ocfs2-devel] [PATCH 1/2] ocfs2: rollback transaction in ocfs2_group_add()
If ocfs2_journal_access_di fails, group->bg_next_group should rollback. Otherwise, there would be a inconsistency between group_bh and main_bm_bh. Signed-off-by: Younger Liu <younger.liu at huawei.com> --- fs/ocfs2/resize.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fs/ocfs2/resize.c b/fs/ocfs2/resize.c index ec55add..376750f 100644 --- a/fs/ocfs2/resize.c +++ b/fs/ocfs2/resize.c @@ -469,6 +469,7 @@ int ocfs2_group_add(struct inode *inode, struct ocfs2_new_group_input *input) struct ocfs2_chain_list *cl; struct ocfs2_chain_rec *cr; u16 cl_bpc; + u64 bg_ptr; if (ocfs2_is_hard_readonly(osb) || ocfs2_is_soft_readonly(osb)) return -EROFS; @@ -538,12 +539,14 @@ int ocfs2_group_add(struct inode *inode, struct ocfs2_new_group_input *input) } group = (struct ocfs2_group_desc *)group_bh->b_data; + bg_ptr = le64_to_cpu(group->bg_next_group); group->bg_next_group = cr->c_blkno; ocfs2_journal_dirty(handle, group_bh); ret = ocfs2_journal_access_di(handle, INODE_CACHE(main_bm_inode), main_bm_bh, OCFS2_JOURNAL_ACCESS_WRITE); if (ret < 0) { + group->bg_next_group = cpu_to_le64(bg_ptr); mlog_errno(ret); goto out_commit; } -- 1.7.9.7
Joel Becker
2013-Sep-27 19:05 UTC
[Ocfs2-devel] [PATCH 1/2] ocfs2: rollback transaction in ocfs2_group_add()
Acked-by: Joel Becker <jlbec at evilplan.org> On Sun, Sep 22, 2013 at 06:51:55PM +0800, Younger Liu wrote:> If ocfs2_journal_access_di fails, group->bg_next_group should rollback. > Otherwise, there would be a inconsistency between group_bh and main_bm_bh. > > Signed-off-by: Younger Liu <younger.liu at huawei.com> > --- > fs/ocfs2/resize.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/fs/ocfs2/resize.c b/fs/ocfs2/resize.c > index ec55add..376750f 100644 > --- a/fs/ocfs2/resize.c > +++ b/fs/ocfs2/resize.c > @@ -469,6 +469,7 @@ int ocfs2_group_add(struct inode *inode, struct ocfs2_new_group_input *input) > struct ocfs2_chain_list *cl; > struct ocfs2_chain_rec *cr; > u16 cl_bpc; > + u64 bg_ptr; > > if (ocfs2_is_hard_readonly(osb) || ocfs2_is_soft_readonly(osb)) > return -EROFS; > @@ -538,12 +539,14 @@ int ocfs2_group_add(struct inode *inode, struct ocfs2_new_group_input *input) > } > > group = (struct ocfs2_group_desc *)group_bh->b_data; > + bg_ptr = le64_to_cpu(group->bg_next_group); > group->bg_next_group = cr->c_blkno; > ocfs2_journal_dirty(handle, group_bh); > > ret = ocfs2_journal_access_di(handle, INODE_CACHE(main_bm_inode), > main_bm_bh, OCFS2_JOURNAL_ACCESS_WRITE); > if (ret < 0) { > + group->bg_next_group = cpu_to_le64(bg_ptr); > mlog_errno(ret); > goto out_commit; > } > -- > 1.7.9.7 > > > _______________________________________________ > Ocfs2-devel mailing list > Ocfs2-devel at oss.oracle.com > https://oss.oracle.com/mailman/listinfo/ocfs2-devel-- Joel's Second Law: If a code change requires additional user setup, it is wrong. http://www.jlbec.org/ jlbec at evilplan.org