afs: consolidate duplicated wait-for-cache-drain code
[openafs.git] / src / afs / SOLARIS / osi_vnodeops.c
index 3e75a39..a765449 100644 (file)
@@ -350,7 +350,7 @@ afs_GetOnePage(struct vnode *vp, u_offset_t off, u_int alen, u_int *protp,
 
     /* Check to see whether the cache entry is still valid */
     if (!(avc->f.states & CStatd)
-       || !hsame(avc->f.m.DataVersion, tdc->f.versionNo)) {
+       || !afs_IsDCacheFresh(tdc, avc)) {
        ReleaseReadLock(&tdc->lock);
        ReleaseReadLock(&avc->lock);
        afs_PutDCache(tdc);
@@ -695,11 +695,7 @@ afs_nfsrdwr(struct vcache *avc, struct uio *auio, enum uio_rw arw,
     afs_MaybeWakeupTruncateDaemon();
     while ((arw == UIO_WRITE)
           && (afs_blocksUsed > PERCENT(CM_WAITFORDRAINPCT, afs_cacheBlocks))) {
-       if (afs_blocksUsed - afs_blocksDiscarded >
-           PERCENT(CM_WAITFORDRAINPCT, afs_cacheBlocks)) {
-           afs_WaitForCacheDrain = 1;
-           afs_osi_Sleep(&afs_WaitForCacheDrain);
-       }
+       afs_MaybeWaitForCacheDrain();
        afs_MaybeFreeDiscardedDCache();
        afs_MaybeWakeupTruncateDaemon();
     }
@@ -886,12 +882,12 @@ afs_nfsrdwr(struct vcache *avc, struct uio *auio, enum uio_rw arw,
                AFS_GLOCK();
                dcp_newpage = afs_FindDCache(avc, pageBase);
                if (dcp_newpage
-                   && hsame(avc->f.m.DataVersion, dcp_newpage->f.versionNo)) {
+                   && afs_IsDCacheFresh(dcp_newpage, avc)) {
                    ObtainWriteLock(&avc->lock, 251);
                    ObtainWriteLock(&avc->vlock, 576);
                    ObtainReadLock(&dcp_newpage->lock);
                    if ((avc->activeV == 0)
-                       && hsame(avc->f.m.DataVersion, dcp_newpage->f.versionNo)
+                       && afs_IsDCacheFresh(dcp_newpage, avc)
                        && !(dcp_newpage->dflags & (DFFetching))) {
                        AFS_GUNLOCK();
                        segmap_pagecreate(segkmap, raddr, rsize, 1);
@@ -1433,7 +1429,7 @@ gafs_rename(struct vnode *odvp, char *aname1,
            vn_setpath(afs_globalVp, pvp, vp, aname2, strlen(aname2));
 # endif /* !HAVE_VN_RENAMEPATH */
 
-           AFS_RELE(avcp);
+           AFS_RELE(AFSTOV(avcp));
        }
     }
 #endif