From 5ea4f2ba9fbc0efecba560633854e7b44e8bd257 Mon Sep 17 00:00:00 2001 From: Rick Macklem Date: Sun, 23 May 2010 02:55:59 +0000 Subject: [PATCH] MFC: r208254 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. --- sys/fs/nfsclient/nfs_clsubs.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/sys/fs/nfsclient/nfs_clsubs.c b/sys/fs/nfsclient/nfs_clsubs.c index 15535098707..144327863d8 100644 --- a/sys/fs/nfsclient/nfs_clsubs.c +++ b/sys/fs/nfsclient/nfs_clsubs.c @@ -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++;