From f8c5fbf7c16623493822a4b4942d3600ffcd011c Mon Sep 17 00:00:00 2001 From: Rick Macklem Date: Tue, 18 May 2010 05:18:21 +0000 Subject: [PATCH] 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 --- 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 155350987075..144327863d81 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++;