PERFORCE change 179270 for review

Efstratios Karatzas gpf at FreeBSD.org
Sun Jun 6 21:49:36 UTC 2010


http://p4web.freebsd.org/@@179270?ac=10

Change 179270 by gpf at gpf_desktop on 2010/06/06 21:48:40

	Current nfs server:
	
	Actually needed to VFS_LOCK_GIANT() before I vrele() every AUDIT_ vnode 
	pointer at the end of each RPC - fixed
	Tested with an exported ntfs partition and everything seems fine
	(my ntfs partition proved useful for a change, huzzah)
	
	Concerning mp-unsafe filesystems: the last thing I need to do is 
	take a look and play with vn_fullpath_nocache() a little bit so 
	it doesn't kernelpanic at the first vref() or something.

Affected files ...

.. //depot/projects/soc2010/gpf_audit/freebsd/src/sys/nfsserver/nfs_serv.c#15 edit

Differences ...

==== //depot/projects/soc2010/gpf_audit/freebsd/src/sys/nfsserver/nfs_serv.c#15 (text+ko) ====

@@ -368,7 +368,9 @@
 	if (AUDIT_vp != NULL) {		
 		if (AUDITING_TD(curthread))
 			nfsrv_auditpath(AUDIT_vp, NULL, NULL, fhp, 1);
+		vfslocked = VFS_LOCK_GIANT(AUDIT_vp->v_mount);
 		vrele(AUDIT_vp);
+		VFS_UNLOCK_GIANT(vfslocked);
 	}
 
 	return(error);
@@ -436,7 +438,9 @@
 	if (AUDIT_vp != NULL) {
 		if (AUDITING_TD(curthread))
 			nfsrv_auditpath(AUDIT_vp, NULL, NULL, fhp, 1);
+		vfslocked = VFS_LOCK_GIANT(AUDIT_vp->v_mount);
 		vrele(AUDIT_vp);
+		VFS_UNLOCK_GIANT(vfslocked);
 	}
 
 	return(error);
@@ -609,7 +613,9 @@
 	if (AUDIT_vp != NULL) {
 		if (AUDITING_TD(curthread))
 			nfsrv_auditpath(AUDIT_vp, NULL, NULL, fhp, 1);
+		vfslocked = VFS_LOCK_GIANT(AUDIT_vp->v_mount);
 		vrele(AUDIT_vp);
+		VFS_UNLOCK_GIANT(vfslocked);
 	}
 
 	return(error);
@@ -807,7 +813,9 @@
 	if (AUDIT_vp != NULL) {
 		if (AUDITING_TD(curthread))
 			nfsrv_auditpath(AUDIT_vp, NULL, NULL, fhp, 1);
+		vfslocked = VFS_LOCK_GIANT(AUDIT_vp->v_mount);
 		vrele(AUDIT_vp);
+		VFS_UNLOCK_GIANT(vfslocked);
 	}
 
 	return (error);
@@ -929,7 +937,9 @@
 	if (AUDIT_vp != NULL) {
 		if (AUDITING_TD(curthread))
 			nfsrv_auditpath(AUDIT_vp, NULL, NULL, fhp, 1);
+		vfslocked = VFS_LOCK_GIANT(AUDIT_vp->v_mount);
 		vrele(AUDIT_vp);
+		VFS_UNLOCK_GIANT(vfslocked);
 	}
 
 	return(error);
@@ -1195,7 +1205,9 @@
 	if (AUDIT_vp != NULL) {
 		if (AUDITING_TD(curthread))
 			nfsrv_auditpath(AUDIT_vp, NULL, NULL, fhp, 1);
+		vfslocked = VFS_LOCK_GIANT(AUDIT_vp->v_mount);
 		vrele(AUDIT_vp);
+		VFS_UNLOCK_GIANT(vfslocked);
 	}
 
 	return(error);
@@ -1430,7 +1442,9 @@
 	if (AUDIT_vp != NULL) {
 		if (AUDITING_TD(curthread))
 			nfsrv_auditpath(AUDIT_vp, NULL, NULL, fhp, 1);
+		vfslocked = VFS_LOCK_GIANT(AUDIT_vp->v_mount);
 		vrele(AUDIT_vp);
+		VFS_UNLOCK_GIANT(vfslocked);
 	}
 
 	return(error);
@@ -1751,10 +1765,16 @@
 	 */
 	if (AUDITING_TD(curthread))
 		nfsrv_auditpath(AUDIT_vp, AUDIT_dvp, nd.ni_cnd.cn_pnbuf, fhp, 1);
-	if (AUDIT_dvp != NULL)
+	if (AUDIT_dvp != NULL) {
+		vfslocked = VFS_LOCK_GIANT(AUDIT_dvp->v_mount);
 		vrele(AUDIT_dvp);
-	if (AUDIT_vp != NULL)
-		vrele(AUDIT_vp);	
+		VFS_UNLOCK_GIANT(vfslocked);
+	}
+	if (AUDIT_vp != NULL) {
+		vfslocked = VFS_LOCK_GIANT(AUDIT_vp->v_mount);
+		vrele(AUDIT_vp);
+		VFS_UNLOCK_GIANT(vfslocked);
+	}
 
 	return (error);
 }
@@ -1967,10 +1987,16 @@
 	 */
 	if (AUDITING_TD(curthread))
 		nfsrv_auditpath(AUDIT_vp, AUDIT_dvp, nd.ni_cnd.cn_pnbuf, fhp, 1);
-	if (AUDIT_dvp != NULL)
+	if (AUDIT_dvp != NULL) {
+		vfslocked = VFS_LOCK_GIANT(AUDIT_dvp->v_mount);
 		vrele(AUDIT_dvp);
-	if (AUDIT_vp != NULL)
+		VFS_UNLOCK_GIANT(vfslocked);
+	}
+	if (AUDIT_vp != NULL) {
+		vfslocked = VFS_LOCK_GIANT(AUDIT_vp->v_mount);
 		vrele(AUDIT_vp);
+		VFS_UNLOCK_GIANT(vfslocked);
+	}
 	return (0);
 nfsmout:
 	if (nd.ni_dvp) {
@@ -1996,10 +2022,16 @@
 	 */
 	if (AUDITING_TD(curthread))
 		nfsrv_auditpath(AUDIT_vp, AUDIT_dvp, nd.ni_cnd.cn_pnbuf, fhp, 1);
-	if (AUDIT_dvp != NULL)
+	if (AUDIT_dvp != NULL) {
+		vfslocked = VFS_LOCK_GIANT(AUDIT_dvp->v_mount);
 		vrele(AUDIT_dvp);
-	if (AUDIT_vp != NULL)
+		VFS_UNLOCK_GIANT(vfslocked);
+	}
+	if (AUDIT_vp != NULL) {
+		vfslocked = VFS_LOCK_GIANT(AUDIT_vp->v_mount);
 		vrele(AUDIT_vp);
+		VFS_UNLOCK_GIANT(vfslocked);
+	}
 
 	return (error);
 }
@@ -2126,7 +2158,9 @@
 	if (AUDIT_dvp != NULL) {
 		if (AUDITING_TD(curthread))
 			nfsrv_auditpath(NULL, AUDIT_dvp, nd.ni_cnd.cn_pnbuf, NULL, 1);
+		vfslocked = VFS_LOCK_GIANT(AUDIT_dvp->v_mount);
 		vrele(AUDIT_dvp);
+		VFS_UNLOCK_GIANT(vfslocked);
 	}
 
 	return(error);
@@ -2387,11 +2421,17 @@
 	if (AUDITING_TD(curthread)) {
 		nfsrv_auditpath(NULL, AUDIT_fromdvp, fromnd.ni_cnd.cn_pnbuf, NULL, 1);		
 		nfsrv_auditpath(NULL, AUDIT_todvp, tond.ni_cnd.cn_pnbuf, NULL, 2);		
+	}	
+	if (AUDIT_fromdvp != NULL) {
+		vfslocked = VFS_LOCK_GIANT(AUDIT_fromdvp->v_mount);
+		vrele(AUDIT_fromdvp);
+		VFS_UNLOCK_GIANT(vfslocked);
 	}
-	if (AUDIT_fromdvp != NULL)
-		vrele(AUDIT_fromdvp);
-	if (AUDIT_todvp != NULL)
+	if (AUDIT_todvp != NULL) {
+		vfslocked = VFS_LOCK_GIANT(AUDIT_todvp->v_mount);
 		vrele(AUDIT_todvp);
+		VFS_UNLOCK_GIANT(vfslocked);
+	}
 
 	return (error);
 }
@@ -2562,11 +2602,17 @@
 	if (AUDITING_TD(curthread)) {
 		nfsrv_auditpath(NULL, AUDIT_dvp, nd.ni_cnd.cn_pnbuf, NULL, 1);		
 		nfsrv_auditpath(AUDIT_vp, NULL, NULL, fhp, 2);		
+	}	
+	if (AUDIT_dvp != NULL) {
+		vfslocked = VFS_LOCK_GIANT(AUDIT_dvp->v_mount);
+		vrele(AUDIT_dvp);
+		VFS_UNLOCK_GIANT(vfslocked);
 	}
-	if (AUDIT_dvp != NULL)
-		vrele(AUDIT_dvp);
-	if (AUDIT_vp != NULL)
+	if (AUDIT_vp != NULL) {
+		vfslocked = VFS_LOCK_GIANT(AUDIT_vp->v_mount);
 		vrele(AUDIT_vp);
+		VFS_UNLOCK_GIANT(vfslocked);
+	}
 
 	return(error);
 }
@@ -2775,10 +2821,16 @@
 	 */
 	if (AUDITING_TD(curthread))
 		nfsrv_auditpath(AUDIT_vp, AUDIT_dvp, nd.ni_cnd.cn_pnbuf, fhp, 1);
-	if (AUDIT_dvp != NULL)
+	if (AUDIT_dvp != NULL) {
+		vfslocked = VFS_LOCK_GIANT(AUDIT_dvp->v_mount);
 		vrele(AUDIT_dvp);
-	if (AUDIT_vp != NULL)
+		VFS_UNLOCK_GIANT(vfslocked);
+	}
+	if (AUDIT_vp != NULL) {
+		vfslocked = VFS_LOCK_GIANT(AUDIT_vp->v_mount);
 		vrele(AUDIT_vp);
+		VFS_UNLOCK_GIANT(vfslocked);
+	}
 
 	return (error);
 }
@@ -2962,10 +3014,16 @@
 	 */
 	if (AUDITING_TD(curthread))
 		nfsrv_auditpath(AUDIT_vp, AUDIT_dvp, nd.ni_cnd.cn_pnbuf, fhp, 1);
-	if (AUDIT_dvp != NULL)
+	if (AUDIT_dvp != NULL) {
+		vfslocked = VFS_LOCK_GIANT(AUDIT_dvp->v_mount);
 		vrele(AUDIT_dvp);
-	if (AUDIT_vp != NULL)
+		VFS_UNLOCK_GIANT(vfslocked);
+	}
+	if (AUDIT_vp != NULL) {
+		vfslocked = VFS_LOCK_GIANT(AUDIT_vp->v_mount);
 		vrele(AUDIT_vp);
+		VFS_UNLOCK_GIANT(vfslocked);
+	}
 
 	return (error);
 }
@@ -3108,7 +3166,9 @@
 	if (AUDIT_dvp != NULL) {
 		if (AUDITING_TD(curthread))
 			nfsrv_auditpath(NULL, AUDIT_dvp, nd.ni_cnd.cn_pnbuf, NULL, 1);
+		vfslocked = VFS_LOCK_GIANT(AUDIT_dvp->v_mount);
 		vrele(AUDIT_dvp);
+		VFS_UNLOCK_GIANT(vfslocked);
 	}	
 
 	return(error);
@@ -3456,7 +3516,9 @@
 	if (AUDIT_vp != NULL) {
 		if (AUDITING_TD(curthread))
 			nfsrv_auditpath(AUDIT_vp, NULL, NULL, fhp, 1);
+		vfslocked = VFS_LOCK_GIANT(AUDIT_vp->v_mount);
 		vrele(AUDIT_vp);
+		VFS_UNLOCK_GIANT(vfslocked);
 	}
 
 	return(error);
@@ -3821,7 +3883,9 @@
 	if (AUDIT_vp) {
 		if (AUDITING_TD(curthread))
 			nfsrv_auditpath(AUDIT_vp, NULL, NULL, fhp, 1);
+		vfslocked = VFS_LOCK_GIANT(AUDIT_vp->v_mount);
 		vrele(AUDIT_vp);
+		VFS_UNLOCK_GIANT(vfslocked);
 	}
 
 	return(error);
@@ -3998,7 +4062,9 @@
 	if (AUDIT_vp != NULL) {
 		if (AUDITING_TD(curthread))		
 			nfsrv_auditpath(AUDIT_vp, NULL, NULL, fhp, 1);
+		vfslocked = VFS_LOCK_GIANT(AUDIT_vp->v_mount);
 		vrele(AUDIT_vp);
+		VFS_UNLOCK_GIANT(vfslocked);
 	}
 
 	return(error);
@@ -4106,7 +4172,9 @@
 	if (AUDIT_vp != NULL) {
 		if (AUDITING_TD(curthread))
 			nfsrv_auditpath(AUDIT_vp, NULL, NULL, fhp, 1);
+		vfslocked = VFS_LOCK_GIANT(AUDIT_vp->v_mount);
 		vrele(AUDIT_vp);
+		VFS_UNLOCK_GIANT(vfslocked);
 	}
 
 	return(error);
@@ -4196,7 +4264,9 @@
 	if (AUDIT_vp != NULL) {
 		if (AUDITING_TD(curthread))
 			nfsrv_auditpath(AUDIT_vp, NULL, NULL, fhp, 1);
+		vfslocked = VFS_LOCK_GIANT(AUDIT_vp->v_mount);
 		vrele(AUDIT_vp);
+		VFS_UNLOCK_GIANT(vfslocked);
 	}
 
 	return(error);
@@ -4284,7 +4354,9 @@
 	if (AUDIT_vp != NULL) {
 		if (AUDITING_TD(curthread))
 			nfsrv_auditpath(AUDIT_vp, NULL, NULL, fhp, 1);
+		vfslocked = VFS_LOCK_GIANT(AUDIT_vp->v_mount);
 		vrele(AUDIT_vp);
+		VFS_UNLOCK_GIANT(vfslocked);
 	}
 
 	return(error);


More information about the p4-projects mailing list