windows-dbg-refcount-20061016
[openafs.git] / src / WINNT / afsd / cm_scache.c
index 76b8a89..d3595d7 100644 (file)
@@ -532,8 +532,13 @@ cm_scache_t *cm_FindSCache(cm_fid_t *fidp)
     return NULL;
 }
 
+#ifdef DEBUG_REFCOUNT
+long cm_GetSCacheDbg(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
+                  cm_req_t *reqp, char * file, long line)
+#else
 long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
                   cm_req_t *reqp)
+#endif
 {
     long hash;
     cm_scache_t *scp;
@@ -561,6 +566,10 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
     lock_ObtainWrite(&cm_scacheLock);
     for (scp=cm_data.hashTablep[hash]; scp; scp=scp->nextp) {
         if (cm_FidCmp(fidp, &scp->fid) == 0) {
+#ifdef DEBUG_REFCOUNT
+           afsi_log("%s:%d cm_GetSCache (1) outScpp 0x%p ref %d", file, line, scp, scp->refCount);
+           osi_Log1(afsd_logp,"cm_GetSCache (1) outScpp 0x%p", scp);
+#endif
             cm_HoldSCacheNoLock(scp);
             *outScpp = scp;
             cm_AdjustLRU(scp);
@@ -656,6 +665,10 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
 #endif
        *outScpp = scp;
         lock_ReleaseWrite(&cm_scacheLock);
+#ifdef DEBUG_REFCOUNT
+       afsi_log("%s:%d cm_GetSCache (2) outScpp 0x%p ref %d", file, line, scp, scp->refCount);
+       osi_Log1(afsd_logp,"cm_GetSCache (2) outScpp 0x%p", scp);
+#endif
         return 0;
     }
     // end of yj code
@@ -679,6 +692,10 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
      */
     for (scp=cm_data.hashTablep[hash]; scp; scp=scp->nextp) {
         if (cm_FidCmp(fidp, &scp->fid) == 0) {
+#ifdef DEBUG_REFCOUNT
+           afsi_log("%s:%d cm_GetSCache (3) outScpp 0x%p ref %d", file, line, scp, scp->refCount);
+           osi_Log1(afsd_logp,"cm_GetSCache (3) outScpp 0x%p", scp);
+#endif
             cm_HoldSCacheNoLock(scp);
             osi_assert(scp->volp == volp);
             cm_AdjustLRU(scp);
@@ -747,6 +764,10 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
         
     /* now we have a held scache entry; just return it */
     *outScpp = scp;
+#ifdef DEBUG_REFCOUNT
+    afsi_log("%s:%d cm_GetSCache (4) outScpp 0x%p ref %d", file, line, scp, scp->refCount);
+    osi_Log1(afsd_logp,"cm_GetSCache (4) outScpp 0x%p", scp);
+#endif
     return 0;
 }
 
@@ -765,15 +786,15 @@ cm_scache_t * cm_FindSCacheParent(cm_scache_t * scp)
     parent_fid.unique = scp->parentUnique;
 
     if (cm_FidCmp(&scp->fid, &parent_fid)) {
-       for (i=0; i<cm_data.hashTableSize; i++) {
-           for (pscp = cm_data.hashTablep[i]; pscp; pscp = pscp->nextp) {
-               if (!cm_FidCmp(&pscp->fid, &parent_fid)) {
-                   cm_HoldSCacheNoLock(pscp);
-                   break;
-               }
+       i = CM_SCACHE_HASH(&parent_fid);
+       for (pscp = cm_data.hashTablep[i]; pscp; pscp = pscp->nextp) {
+           if (!cm_FidCmp(&pscp->fid, &parent_fid)) {
+               cm_HoldSCacheNoLock(pscp);
+               break;
            }
        }
     }
+
     lock_ReleaseRead(&cm_scacheLock);
 
     return pscp;
@@ -1422,27 +1443,41 @@ void cm_AFSFidFromFid(AFSFid *afsFidp, cm_fid_t *fidp)
     afsFidp->Unique = fidp->unique;
 }       
 
+#ifdef DEBUG_REFCOUNT
+void cm_HoldSCacheNoLockDbg(cm_scache_t *scp, char * file, long line)
+#else
 void cm_HoldSCacheNoLock(cm_scache_t *scp)
+#endif
 {
     osi_assert(scp != 0);
     scp->refCount++;
 #ifdef DEBUG_REFCOUNT
     osi_Log2(afsd_logp,"cm_HoldSCacheNoLock scp 0x%p ref %d",scp, scp->refCount);
+    afsi_log("%s:%d cm_HoldSCacheNoLock scp 0x%p, ref %d", file, line, scp, scp->refCount);
 #endif
 }
 
+#ifdef DEBUG_REFCOUNT
+void cm_HoldSCacheDbg(cm_scache_t *scp, char * file, long line)
+#else
 void cm_HoldSCache(cm_scache_t *scp)
+#endif
 {
     osi_assert(scp != 0);
     lock_ObtainWrite(&cm_scacheLock);
     scp->refCount++;
 #ifdef DEBUG_REFCOUNT
     osi_Log2(afsd_logp,"cm_HoldSCache scp 0x%p ref %d",scp, scp->refCount);
+    afsi_log("%s:%d cm_HoldSCache scp 0x%p ref %d", file, line, scp, scp->refCount);
 #endif
     lock_ReleaseWrite(&cm_scacheLock);
 }
 
+#ifdef DEBUG_REFCOUNT
+void cm_ReleaseSCacheNoLockDbg(cm_scache_t *scp, char * file, long line)
+#else
 void cm_ReleaseSCacheNoLock(cm_scache_t *scp)
+#endif
 {
     osi_assert(scp != NULL);
     if (scp->refCount == 0)
@@ -1450,10 +1485,15 @@ void cm_ReleaseSCacheNoLock(cm_scache_t *scp)
     osi_assert(scp->refCount-- >= 0);
 #ifdef DEBUG_REFCOUNT
     osi_Log2(afsd_logp,"cm_ReleaseSCacheNoLock scp 0x%p ref %d",scp,scp->refCount);
+    afsi_log("%s:%d cm_ReleaseSCacheNoLock scp 0x%p ref %d", file, line, scp, scp->refCount);
 #endif
 }
 
+#ifdef DEBUG_REFCOUNT
+void cm_ReleaseSCacheDbg(cm_scache_t *scp, char * file, long line)
+#else
 void cm_ReleaseSCache(cm_scache_t *scp)
+#endif
 {
     osi_assert(scp != NULL);
     lock_ObtainWrite(&cm_scacheLock);
@@ -1463,6 +1503,7 @@ void cm_ReleaseSCache(cm_scache_t *scp)
     scp->refCount--;
 #ifdef DEBUG_REFCOUNT
     osi_Log2(afsd_logp,"cm_ReleaseSCache scp 0x%p ref %d",scp,scp->refCount);
+    afsi_log("%s:%d cm_ReleaseSCache scp 0x%p ref %d", file, line, scp, scp->refCount);
 #endif
     lock_ReleaseWrite(&cm_scacheLock);
 }