diff options
author | rwatson <rwatson@FreeBSD.org> | 2004-05-30 22:59:54 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2004-05-30 22:59:54 +0000 |
commit | 0f1ef0c8cba1e02e3f50105d92ad07b4fef91d6f (patch) | |
tree | ecd55ac2ae44e10835774fe861d8ce7fb89ef4e8 /sys/nfsserver | |
parent | 49037b244c633849c2bf225b0c9d2cf91e8702da (diff) | |
download | FreeBSD-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')
-rw-r--r-- | sys/nfsserver/nfs_serv.c | 7 |
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); } |