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