diff options
author | jeff <jeff@FreeBSD.org> | 2006-03-31 03:54:20 +0000 |
---|---|---|
committer | jeff <jeff@FreeBSD.org> | 2006-03-31 03:54:20 +0000 |
commit | 32b1878006f50d14c52851c90a362f1012c69f43 (patch) | |
tree | db33a736e9b94a3a4157303b09a71a143008ad95 /sys/nfsserver/nfs_srvsubs.c | |
parent | b9e82e7feff34d930f11589e465848e6fe444742 (diff) | |
download | FreeBSD-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.c | 6 |
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); } |