diff options
author | jeff <jeff@FreeBSD.org> | 2007-03-17 18:18:08 +0000 |
---|---|---|
committer | jeff <jeff@FreeBSD.org> | 2007-03-17 18:18:08 +0000 |
commit | d43d58ff4578f356c44c4ad57ff2d4c6b2b99a50 (patch) | |
tree | 3cce5e99818314cbc53c7fe494e3fdbfa9017a1e /sys/nfsserver/nfs_srvcache.c | |
parent | 82143f95ad1b41e027bececf613c3e94f1556ac6 (diff) | |
download | FreeBSD-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.c | 2 |
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(); |