From: Jeffrey Altman Date: Fri, 16 Aug 2013 19:36:32 +0000 (-0400) Subject: Windows: Do not recycle deleted scache on refcnt 0 X-Git-Tag: openafs-stable-1_8_0pre1~1042 X-Git-Url: http://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=3f163fad55fb7e88e8206139ab1c16fe4fbe1487;hp=acad253a357c2c97fcd8f59c489ac2c7cacba7b7 Windows: Do not recycle deleted scache on refcnt 0 If the scache object with CM_SCACHEFLAG_DELETED set is recycled then the deleted state is lost and the cache manager cannot prevent unnecessary FetchStatus queries to the file server. Change-Id: Idaed9c3a18fb1d68c9c6d720a5b16591acafce7d Reviewed-on: http://gerrit.openafs.org/10142 Tested-by: BuildBot Reviewed-by: Jeffrey Altman --- diff --git a/src/WINNT/afsd/cm_scache.c b/src/WINNT/afsd/cm_scache.c index a2b7be5..3595e96 100644 --- a/src/WINNT/afsd/cm_scache.c +++ b/src/WINNT/afsd/cm_scache.c @@ -2212,34 +2212,6 @@ void cm_ReleaseSCacheNoLock(cm_scache_t *scp) osi_Log2(afsd_logp,"cm_ReleaseSCacheNoLock scp 0x%p ref %d",scp, refCount); afsi_log("%s:%d cm_ReleaseSCacheNoLock scp 0x%p ref %d", file, line, scp, refCount); #endif - - if (refCount == 0 && (scp->flags & CM_SCACHEFLAG_DELETED)) { - int deleted = 0; - long lockstate; - - lockstate = lock_GetRWLockState(&cm_scacheLock); - if (lockstate != OSI_RWLOCK_WRITEHELD) - lock_ReleaseRead(&cm_scacheLock); - else - lock_ReleaseWrite(&cm_scacheLock); - - lock_ObtainWrite(&scp->rw); - if (scp->flags & CM_SCACHEFLAG_DELETED) - deleted = 1; - - if (refCount == 0 && deleted) { - lock_ObtainWrite(&cm_scacheLock); - cm_RecycleSCache(scp, 0); - if (lockstate != OSI_RWLOCK_WRITEHELD) - lock_ConvertWToR(&cm_scacheLock); - } else { - if (lockstate != OSI_RWLOCK_WRITEHELD) - lock_ObtainRead(&cm_scacheLock); - else - lock_ObtainWrite(&cm_scacheLock); - } - lock_ReleaseWrite(&scp->rw); - } } #ifdef DEBUG_REFCOUNT @@ -2263,19 +2235,6 @@ void cm_ReleaseSCache(cm_scache_t *scp) afsi_log("%s:%d cm_ReleaseSCache scp 0x%p ref %d", file, line, scp, refCount); #endif lock_ReleaseRead(&cm_scacheLock); - - if (scp->flags & CM_SCACHEFLAG_DELETED) { - int deleted = 0; - lock_ObtainWrite(&scp->rw); - if (scp->flags & CM_SCACHEFLAG_DELETED) - deleted = 1; - if (deleted) { - lock_ObtainWrite(&cm_scacheLock); - cm_RecycleSCache(scp, 0); - lock_ReleaseWrite(&cm_scacheLock); - } - lock_ReleaseWrite(&scp->rw); - } } /* just look for the scp entry to get filetype */