summaryrefslogtreecommitdiffstats
path: root/sys/nfsserver/nfs_serv.c
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2004-05-30 22:59:54 +0000
committerrwatson <rwatson@FreeBSD.org>2004-05-30 22:59:54 +0000
commit0f1ef0c8cba1e02e3f50105d92ad07b4fef91d6f (patch)
treeecd55ac2ae44e10835774fe861d8ce7fb89ef4e8 /sys/nfsserver/nfs_serv.c
parent49037b244c633849c2bf225b0c9d2cf91e8702da (diff)
downloadFreeBSD-src-0f1ef0c8cba1e02e3f50105d92ad07b4fef91d6f.zip
FreeBSD-src-0f1ef0c8cba1e02e3f50105d92ad07b4fef91d6f.tar.gz
One more case where we want to drop the NFS server lock and acquire
Giant when entering VFS. Discovered by code inspection; still not hit without debug.mpsafenet=1. Reported by: bmilekic
Diffstat (limited to 'sys/nfsserver/nfs_serv.c')
-rw-r--r--sys/nfsserver/nfs_serv.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/nfsserver/nfs_serv.c b/sys/nfsserver/nfs_serv.c
index a7bf43c..bc6e4ff 100644
--- a/sys/nfsserver/nfs_serv.c
+++ b/sys/nfsserver/nfs_serv.c
@@ -225,8 +225,13 @@ nfsrv3_access(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
tl = nfsm_build(u_int32_t *, NFSX_UNSIGNED);
*tl = txdr_unsigned(nfsmode);
nfsmout:
- if (vp)
+ if (vp) {
+ NFSD_UNLOCK();
+ mtx_lock(&Giant); /* VFS */
vput(vp);
+ mtx_unlock(&Giant); /* VFS */
+ NFSD_LOCK();
+ }
return(error);
}
OpenPOWER on IntegriCloud