summaryrefslogtreecommitdiffstats
path: root/sys/nfsserver/nfs_srvcache.c
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2007-03-17 18:18:08 +0000
committerjeff <jeff@FreeBSD.org>2007-03-17 18:18:08 +0000
commitd43d58ff4578f356c44c4ad57ff2d4c6b2b99a50 (patch)
tree3cce5e99818314cbc53c7fe494e3fdbfa9017a1e /sys/nfsserver/nfs_srvcache.c
parent82143f95ad1b41e027bececf613c3e94f1556ac6 (diff)
downloadFreeBSD-src-d43d58ff4578f356c44c4ad57ff2d4c6b2b99a50.zip
FreeBSD-src-d43d58ff4578f356c44c4ad57ff2d4c6b2b99a50.tar.gz
- Turn all explicit giant acquires into conditional VFS_LOCK_GIANTs.
Only ops which used namei still remained. - Implement a scheme for reducing the overhead of tracking which vops require giant by constantly reducing the number of recursive giant acquires to one, leaving us with only one vfslocked variable. - Remove all NFSD lock acquisition and release from the individual nfs ops. Careful examination has shown that they are not required. This greatly simplifies the code. Sponsored by: Isilon Systems, Inc. Discussed with: rwatson Tested by: kkenn Approved by: re
Diffstat (limited to 'sys/nfsserver/nfs_srvcache.c')
-rw-r--r--sys/nfsserver/nfs_srvcache.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/nfsserver/nfs_srvcache.c b/sys/nfsserver/nfs_srvcache.c
index 7d0c126..ca6b8c2 100644
--- a/sys/nfsserver/nfs_srvcache.c
+++ b/sys/nfsserver/nfs_srvcache.c
@@ -218,9 +218,11 @@ loop:
ret = RC_DROPIT;
} else if (rp->rc_flag & RC_REPSTATUS) {
nfsrvstats.srvcache_nonidemdonehits++;
+ NFSD_UNLOCK();
*repp = nfs_rephead(0, nd, rp->rc_status,
&mb, &bpos);
ret = RC_REPLY;
+ NFSD_LOCK();
} else if (rp->rc_flag & RC_REPMBUF) {
nfsrvstats.srvcache_nonidemdonehits++;
NFSD_UNLOCK();
OpenPOWER on IntegriCloud