Module Name:    src
Committed By:   bouyer
Date:           Mon Feb  7 16:24:13 UTC 2011

Modified Files:
        src/sys/ufs/ufs [bouyer-quota2]: ufs_quota2.c

Log Message:
Create a WAPBL transaction when setting quotas.


To generate a diff of this commit:
cvs rdiff -u -r1.1.2.7 -r1.1.2.8 src/sys/ufs/ufs/ufs_quota2.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/ufs/ufs/ufs_quota2.c
diff -u src/sys/ufs/ufs/ufs_quota2.c:1.1.2.7 src/sys/ufs/ufs/ufs_quota2.c:1.1.2.8
--- src/sys/ufs/ufs/ufs_quota2.c:1.1.2.7	Thu Feb  3 15:56:16 2011
+++ src/sys/ufs/ufs/ufs_quota2.c	Mon Feb  7 16:24:13 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: ufs_quota2.c,v 1.1.2.7 2011/02/03 15:56:16 bouyer Exp $ */
+/* $NetBSD: ufs_quota2.c,v 1.1.2.8 2011/02/07 16:24:13 bouyer Exp $ */
 /*-
   * Copyright (c) 2010 Manuel Bouyer
   * All rights reserved.
@@ -28,7 +28,7 @@
   */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ufs_quota2.c,v 1.1.2.7 2011/02/03 15:56:16 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ufs_quota2.c,v 1.1.2.8 2011/02/07 16:24:13 bouyer Exp $");
 
 #include <sys/buf.h>
 #include <sys/param.h>
@@ -502,29 +502,33 @@
 
 	if (ump->um_quotas[type] == NULLVP)
 		return ENODEV;
+	error = UFS_WAPBL_BEGIN(ump->um_mountp);
+	if (error)
+		return error;
+	
 	if (defaultq) {
 		mutex_enter(&dqlock);
 		error = getq2h(ump, type, &bp, &q2h, B_MODIFY);
 		if (error) {
 			mutex_exit(&dqlock);
-			return error;
+			goto out_wapbl;
 		}
 		quota2_ufs_rwq2e(&q2h->q2h_defentry, &q2e, needswap);
 		error = quota2_dict_update_q2e_limits(data, &q2e);
 		if (error) {
 			mutex_exit(&dqlock);
 			brelse(bp, 0);
-			return error;
+			goto out_wapbl;
 		}
 		quota2_ufs_rwq2e(&q2e, &q2h->q2h_defentry, needswap);
 		mutex_exit(&dqlock);
 		VOP_BWRITE(bp);
-		return error;
+		goto out_wapbl;
 	}
 
 	error = dqget(NULLVP, id, ump, type, &dq);
 	if (error)
-		return error;
+		goto out_wapbl;
 
 	if (dq->dq2_lblkno == 0 && dq->dq2_blkoff == 0) {
 		/* need to alloc a new on-disk quot */
@@ -537,7 +541,7 @@
 	}
 	if (error) {
 		dqrele(NULLVP, dq);
-		return error;
+		goto out_wapbl;
 	}
 	mutex_enter(&dq->dq_interlock);
 	quota2_ufs_rwq2e(q2ep, &q2e, needswap);
@@ -546,13 +550,15 @@
 		mutex_exit(&dq->dq_interlock);
 		dqrele(NULLVP, dq);
 		brelse(bp, 0);
-		return error;
+		goto out_wapbl;
 	}
 	quota2_ufs_rwq2e(&q2e, q2ep, needswap);
 	mutex_exit(&dq->dq_interlock);
 	dqrele(NULLVP, dq);
 	VOP_BWRITE(bp);
-	
+
+out_wapbl:
+	UFS_WAPBL_END(ump->um_mountp);
 	return error;
 }
 

Reply via email to