Skip to contentSkip to conversation

ocfs2: Commit transactions in error cases -v2

PATCH New Wengang Wang 3 participants 3 messages Oct 12, 2011 – Nov 17, 2011 OCFS2

lore
Share & tools
lore
#0 lore raw

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
index ed553c6..3165aeb 100644
@@ -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
index bc91072..5612c3d 100644
@@ -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
index 81ecf9c..93d6c80 100644
@@ -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
#1 lore raw

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.

---
  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
index ed553c6..3165aeb 100644
@@ -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
index bc91072..5612c3d 100644
@@ -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
index 81ecf9c..93d6c80 100644
@@ -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)
maintainer
#2 lore raw

PATCH 1/1 ocfs2: Commit transactions in error cases -v2

In reply to Wengang Wang
Quoted 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.

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
index ed553c6..3165aeb 100644
@@ -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
index bc91072..5612c3d 100644
@@ -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
index 81ecf9c..93d6c80 100644
@@ -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