libafs: use afs_ResetVCache in flush volume data
[openafs.git] / src / afs / afs_disconnected.c
index 795412c..4f4ce80 100644 (file)
@@ -71,12 +71,14 @@ afs_FindDCacheByFid(struct VenusFid *afid)
     ObtainWriteLock(&afs_xdcache, 758);
     for (index = afs_dvhashTbl[i]; index != NULLIDX;) {
        if (afs_indexUnique[index] == afid->Fid.Unique) {
-           tdc = afs_GetDSlot(index, NULL);
-           ReleaseReadLock(&tdc->tlock);
-           if (!FidCmp(&tdc->f.fid, afid)) {
-               break;          /* leaving refCount high for caller */
+           tdc = afs_GetValidDSlot(index);
+           if (tdc) {
+               ReleaseReadLock(&tdc->tlock);
+               if (!FidCmp(&tdc->f.fid, afid)) {
+                   break;              /* leaving refCount high for caller */
+               }
+               afs_PutDCache(tdc);
            }
-           afs_PutDCache(tdc);
        }
        index = afs_dvnextTbl[index];
     }
@@ -853,7 +855,7 @@ afs_ProcessOpCreate(struct vcache *avc, struct vrequest *areq,
     ObtainWriteLock(&afs_xdcache, 743);
     for (index = afs_dvhashTbl[hash]; index != NULLIDX; index = hash) {
         hash = afs_dvnextTbl[index];
-        tdc = afs_GetDSlot(index, NULL);
+        tdc = afs_GetValidDSlot(index);
         ReleaseReadLock(&tdc->tlock);
        if (afs_indexUnique[index] == avc->f.fid.Fid.Unique) {
             if (!FidCmp(&tdc->f.fid, &avc->f.fid)) {
@@ -1232,7 +1234,7 @@ afs_ResyncDisconFiles(struct vrequest *areq, afs_ucred_t *acred)
        } else if (afs_ConflictPolicy == SERVER_WINS) {
            /* DV mismatch, apply collision resolution policy. */
            /* Discard this files chunks and remove from current dir. */
-           afs_ResetVCache(tvc, acred);
+           afs_ResetVCache(tvc, acred, 0);
            tvc->f.truncPos = AFS_NOTRUNC;
        } else {
            /* printf("afs_ResyncDisconFiles: no resolution policy selected.\n"); */
@@ -1325,7 +1327,7 @@ afs_DisconDiscardAllShadows(int squash, afs_ucred_t *acred)
        ObtainWriteLock(&tvc->lock, 706);
 
        if (squash)
-          afs_ResetVCache(tvc, acred);
+          afs_ResetVCache(tvc, acred, 0);
 
        afs_DeleteShadowDir(tvc);
 
@@ -1354,7 +1356,7 @@ afs_DisconDiscardAll(afs_ucred_t *acred)
        ReleaseWriteLock(&afs_disconDirtyLock);
 
        ObtainWriteLock(&tvc->lock, 718);
-       afs_ResetVCache(tvc, acred);
+       afs_ResetVCache(tvc, acred, 0);
        tvc->f.truncPos = AFS_NOTRUNC;
        ReleaseWriteLock(&tvc->lock);
        ObtainWriteLock(&afs_disconDirtyLock, 719);