ocfs2: Commit transactions in error cases -v2
PATCH 1/1 ocfs2: Commit transactions in error cases -v2
There are three cases found that in error cases, journal transactions are not committed nor aborted. We should take care of these case by committing the transactions. Otherwise, there would left a journal handle which will lead to , in same process context, the comming ocfs2_start_trans() gets wrong credits.
--- fs/ocfs2/alloc.c | 2 +- fs/ocfs2/ioctl.c | 3 ++- fs/ocfs2/xattr.c | 10 ++++++---- 3 files changed, 9 insertions(+), 6 deletions(-)
fs/ocfs2/alloc.c +1 -1
@@ -5699,7 +5699,7 @@ int ocfs2_remove_btree_range(struct inode *inode, OCFS2_JOURNAL_ACCESS_WRITE);if (ret) {mlog_errno (ret); - goto out; + goto out_commit; } dquot_free_space_nodirty(inode,
fs/ocfs2/ioctl.c +2 -1
@@ -122,7 +122,7 @@ static int ocfs2_set_inode_attr(struct inode *inode, unsigned flags,if ((oldflags &OCFS2_IMMUTABLE_FL ) || ((flags ^ oldflags) & (OCFS2_APPEND_FL |OCFS2_IMMUTABLE_FL ))) {if (!capable (CAP_LINUX_IMMUTABLE )) - goto bail_unlock; + goto bail_commit; } ocfs2_inode->ip_attr = flags;
@@ -132,6 +132,7 @@ static int ocfs2_set_inode_attr(struct inode *inode, unsigned flags,if (status <0 )mlog_errno (status); +bail_commit:ocfs2_commit_trans (osb, handle); bail_unlock:ocfs2_inode_unlock (inode,1 );
fs/ocfs2/xattr.c +6 -4
@@ -2376,16 +2376,18 @@ static int ocfs2_remove_value_outside(struct inode*inode, } ret =ocfs2_xattr_value_truncate (inode, vb,0 , &ctxt); -if (ret <0 ) { -mlog_errno (ret); -break ; - }ocfs2_commit_trans (osb, ctxt.handle);if (ctxt.meta_ac) {ocfs2_free_alloc_context (ctxt.meta_ac); ctxt.meta_ac =NULL ; } + +if (ret <0 ) { +mlog_errno (ret); +break ; + } + }if (ctxt.meta_ac)
Signature · 1 line
1.7.5.2
PATCH 1/1 ocfs2: Commit transactions in error cases -v2
Quoted 73 lines · Wengang Wang
There are three cases found that in error cases, journal transactions are not committed nor aborted. We should take care of these case by committing the transactions. Otherwise, there would left a journal handle which will lead to , in same process context, the comming
ocfs2_start_trans()gets wrong credits.Signed-off-by Wengang Wang<[email protected]>--- fs/ocfs2/alloc.c | 2 +- fs/ocfs2/ioctl.c | 3 ++- fs/ocfs2/xattr.c | 10 ++++++---- 3 files changed, 9 insertions(+), 6 deletions(-)fs/ocfs2/alloc.c +1
-1@@ -5699,7 +5699,7 @@ int ocfs2_remove_btree_range(struct inode *inode, OCFS2_JOURNAL_ACCESS_WRITE);if (ret) {mlog_errno (ret); - goto out; + goto out_commit; } dquot_free_space_nodirty(inode,fs/ocfs2/ioctl.c +2
-1@@ -122,7 +122,7 @@ static int ocfs2_set_inode_attr(struct inode *inode, unsigned flags,if ((oldflags&OCFS2_IMMUTABLE_FL ) || ((flags ^ oldflags)& (OCFS2_APPEND_FL |OCFS2_IMMUTABLE_FL ))) {if (!capable (CAP_LINUX_IMMUTABLE )) - goto bail_unlock; + goto bail_commit; } ocfs2_inode->ip_attr = flags;@@ -132,6 +132,7 @@ static int ocfs2_set_inode_attr(struct inode *inode, unsigned flags,if (status<0 )mlog_errno (status); +bail_commit:ocfs2_commit_trans (osb, handle); bail_unlock:ocfs2_inode_unlock (inode,1 );fs/ocfs2/xattr.c +6
-4@@ -2376,16 +2376,18 @@ static int ocfs2_remove_value_outside(struct inode*inode, } ret =ocfs2_xattr_value_truncate (inode, vb,0 ,&ctxt); -if (ret<0 ) { -mlog_errno (ret); -break ; - }ocfs2_commit_trans (osb, ctxt.handle);if (ctxt.meta_ac) {ocfs2_free_alloc_context (ctxt.meta_ac); ctxt.meta_ac =NULL ; } + +if (ret<0 ) { +mlog_errno (ret); +break ; + } + }if (ctxt.meta_ac)
Joel Becker
maintainerPATCH 1/1 ocfs2: Commit transactions in error cases -v2
In reply to Wengang WangQuoted 6 lines · Wengang Wang
There are three cases found that in error cases, journal transactions are not committed nor aborted. We should take care of these case by committing the transactions. Otherwise, there would left a journal handle which will lead to , in same process context, the comming
ocfs2_start_trans()gets wrong credits.Signed-off-by Wengang Wang <[email protected]>
This patch is now in the 'fixes' branch of ocfs2.git.
Joel
Quoted 75 lines
--- fs/ocfs2/alloc.c | 2 +- fs/ocfs2/ioctl.c | 3 ++- fs/ocfs2/xattr.c | 10 ++++++---- 3 files changed, 9 insertions(+), 6 deletions(-)fs/ocfs2/alloc.c +1
-1@@ -5699,7 +5699,7 @@ int ocfs2_remove_btree_range(struct inode *inode, OCFS2_JOURNAL_ACCESS_WRITE);if (ret) {mlog_errno (ret); - goto out; + goto out_commit; } dquot_free_space_nodirty(inode,fs/ocfs2/ioctl.c +2
-1@@ -122,7 +122,7 @@ static int ocfs2_set_inode_attr(struct inode *inode, unsigned flags,if ((oldflags &OCFS2_IMMUTABLE_FL ) || ((flags ^ oldflags) & (OCFS2_APPEND_FL |OCFS2_IMMUTABLE_FL ))) {if (!capable (CAP_LINUX_IMMUTABLE )) - goto bail_unlock; + goto bail_commit; } ocfs2_inode->ip_attr = flags;@@ -132,6 +132,7 @@ static int ocfs2_set_inode_attr(struct inode *inode, unsigned flags,if (status <0 )mlog_errno (status); +bail_commit:ocfs2_commit_trans (osb, handle); bail_unlock:ocfs2_inode_unlock (inode,1 );fs/ocfs2/xattr.c +6
-4@@ -2376,16 +2376,18 @@ static int ocfs2_remove_value_outside(struct inode*inode, } ret =ocfs2_xattr_value_truncate (inode, vb,0 , &ctxt); -if (ret <0 ) { -mlog_errno (ret); -break ; - }ocfs2_commit_trans (osb, ctxt.handle);if (ctxt.meta_ac) {ocfs2_free_alloc_context (ctxt.meta_ac); ctxt.meta_ac =NULL ; } + +if (ret <0 ) { +mlog_errno (ret); +break ; + } + }if (ctxt.meta_ac)Signature · 7 lines
1.7.5.2 _______________________________________________ Ocfs2-devel mailing list Ocfs2-devel at oss.oracle.com http://oss.oracle.com/mailman/listinfo/ocfs2-devel
Signature · 5 lines
"There is no sincerer love than the love of food."
- George Bernard Shaw
http://www.jlbec.org/
jlbec at evilplan.org