Allow the experimental NFSv4 client to use cached attributes

when a write delegation is held. Also, add a missing
mtx_unlock() call for the ACL debugging code.

MFC after:	5 days
This commit is contained in:
Rick Macklem 2010-05-18 05:18:21 +00:00
parent c0fd703892
commit f8c5fbf7c1

View File

@ -188,11 +188,12 @@ ncl_getattrcache(struct vnode *vp, struct vattr *vaper)
struct nfsnode *np;
struct vattr *vap;
struct nfsmount *nmp;
int timeo;
int timeo, mustflush;
np = VTONFS(vp);
vap = &np->n_vattr.na_vattr;
nmp = VFSTONFS(vp->v_mount);
mustflush = nfscl_mustflush(vp); /* must be before mtx_lock() */
#ifdef NFS_ACDEBUG
mtx_lock(&Giant); /* ncl_printf() */
#endif
@ -228,9 +229,13 @@ ncl_getattrcache(struct vnode *vp, struct vattr *vaper)
(time_second - np->n_attrstamp), timeo);
#endif
if ((time_second - np->n_attrstamp) >= timeo) {
if ((time_second - np->n_attrstamp) >= timeo &&
mustflush != 0) {
newnfsstats.attrcache_misses++;
mtx_unlock(&np->n_mtx);
#ifdef NFS_ACDEBUG
mtx_unlock(&Giant); /* ncl_printf() */
#endif
return( ENOENT);
}
newnfsstats.attrcache_hits++;