summaryrefslogtreecommitdiffstats
path: root/sys/nfsserver/nfs_srvsubs.c
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2006-03-31 03:54:20 +0000
committerjeff <jeff@FreeBSD.org>2006-03-31 03:54:20 +0000
commit32b1878006f50d14c52851c90a362f1012c69f43 (patch)
treedb33a736e9b94a3a4157303b09a71a143008ad95 /sys/nfsserver/nfs_srvsubs.c
parentb9e82e7feff34d930f11589e465848e6fe444742 (diff)
downloadFreeBSD-src-32b1878006f50d14c52851c90a362f1012c69f43.zip
FreeBSD-src-32b1878006f50d14c52851c90a362f1012c69f43.tar.gz
- Release the references acquired by VOP_GETWRITEMOUNT and vfs_getvfs().
Discussed with: tegge Tested by: kris Sponsored by: Isilon Systems, Inc.
Diffstat (limited to 'sys/nfsserver/nfs_srvsubs.c')
-rw-r--r--sys/nfsserver/nfs_srvsubs.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/nfsserver/nfs_srvsubs.c b/sys/nfsserver/nfs_srvsubs.c
index 1aa976a..375a1d2 100644
--- a/sys/nfsserver/nfs_srvsubs.c
+++ b/sys/nfsserver/nfs_srvsubs.c
@@ -1069,6 +1069,7 @@ nfsrv_fhtovp(fhandle_t *fhp, int lockflag, struct vnode **vpp,
int i;
struct ucred *credanon;
int error, exflags;
+ int vfslocked;
#ifdef MNT_EXNORESPORT /* XXX needs mountd and /etc/exports help yet */
struct sockaddr_int *saddr;
#endif
@@ -1087,7 +1088,7 @@ nfsrv_fhtovp(fhandle_t *fhp, int lockflag, struct vnode **vpp,
if (!mp)
return (ESTALE);
NFSD_UNLOCK();
- mtx_lock(&Giant); /* VFS */
+ vfslocked = VFS_LOCK_GIANT(mp);
error = VFS_CHECKEXP(mp, nam, &exflags, &credanon);
if (error)
goto out;
@@ -1124,7 +1125,8 @@ nfsrv_fhtovp(fhandle_t *fhp, int lockflag, struct vnode **vpp,
if (!lockflag)
VOP_UNLOCK(*vpp, 0, td);
out:
- mtx_unlock(&Giant); /* VFS */
+ vfs_rel(mp);
+ VFS_UNLOCK_GIANT(vfslocked);
NFSD_LOCK();
return (error);
}
OpenPOWER on IntegriCloud