]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Windows: Interlocked for cm_buf cmFlags
authorJeffrey Altman <jaltman@your-file-system.com>
Wed, 10 Aug 2011 15:42:59 +0000 (11:42 -0400)
committerDerrick Brashear <shadow@dementia.org>
Fri, 12 Aug 2011 15:59:23 +0000 (08:59 -0700)
Reviewed-on: http://gerrit.openafs.org/5196
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Tested-by: Jeffrey Altman <jaltman@openafs.org>
(cherry picked from commit 4876a416d2e59e87f9da8834db1ea4770f2c618c)

Change-Id: I7416e0be7f0de82eddc366dbdb77e94ceabab797
Reviewed-on: http://gerrit.openafs.org/5217
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
src/WINNT/afsd/cm_buf.c
src/WINNT/afsd/cm_dcache.c
src/WINNT/afsd/cm_scache.c

index 676bed6fb307c8ac2cd85f2ee4750bde1f802b10..5b843599605ab7f9ede734641a5693f4bfe2f67f 100644 (file)
@@ -2016,7 +2016,7 @@ long buf_CleanDirtyBuffers(cm_scache_t *scp)
        if (!cm_FidCmp(fidp, &bp->fid) && (bp->flags & CM_BUF_DIRTY)) {
             buf_Hold(bp);
            lock_ObtainMutex(&bp->mx);
-           bp->cmFlags &= ~CM_BUF_CMSTORING;
+           _InterlockedAnd(&bp->cmFlags, ~CM_BUF_CMSTORING);
            bp->flags &= ~CM_BUF_DIRTY;
             bp->dirty_offset = 0;
             bp->dirty_length = 0;
index b7810fca562cd5a68c978b0d1fd1335f8e947626..9f01e01391a290bb684885bc805176f3a1c36089 100644 (file)
@@ -839,7 +839,7 @@ cm_BkgPrefetch(cm_scache_t *scp, afs_uint32 p1, afs_uint32 p2, afs_uint32 p3, af
                 lock_ObtainWrite(&scp->rw);
                 rxheld = 1;
             }
-            bp->cmFlags &= ~CM_BUF_CMBKGFETCH;
+            _InterlockedAnd(&bp->cmFlags, ~CM_BUF_CMBKGFETCH);
             buf_Release(bp);
             bp = NULL;
             continue;
@@ -854,7 +854,7 @@ cm_BkgPrefetch(cm_scache_t *scp, afs_uint32 p1, afs_uint32 p2, afs_uint32 p3, af
         if (code == 0)
             fetched = LargeIntegerAdd(fetched, tblocksize);
         buf_Release(bp);
-        bp->cmFlags &= ~CM_BUF_CMBKGFETCH;
+        _InterlockedAnd(&bp->cmFlags, ~CM_BUF_CMBKGFETCH);
     }
 
     if (!rxheld) {
@@ -869,7 +869,7 @@ cm_BkgPrefetch(cm_scache_t *scp, afs_uint32 p1, afs_uint32 p2, afs_uint32 p3, af
     {
         bp = buf_Find(scp, &offset);
         if (bp) {
-            bp->cmFlags &= ~CM_BUF_CMBKGFETCH;
+            _InterlockedAnd(&bp->cmFlags, ~CM_BUF_CMBKGFETCH);
             buf_Release(bp);
         }
     }
@@ -960,7 +960,7 @@ void cm_ConsiderPrefetch(cm_scache_t *scp, osi_hyper_t *offsetp, afs_uint32 coun
             rwheld = 1;
         }
 
-        bp->cmFlags |= CM_BUF_CMBKGFETCH;
+        _InterlockedOr(&bp->cmFlags, CM_BUF_CMBKGFETCH);
         buf_Release(bp);
     }
 
@@ -1952,7 +1952,7 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *userp
                         * PREFETCHING flag, so the reader waiting for
                         * this buffer will start a prefetch.
                         */
-                        tbufp->cmFlags |= CM_BUF_CMFULLYFETCHED;
+                        _InterlockedOr(&tbufp->cmFlags, CM_BUF_CMFULLYFETCHED);
                         lock_ObtainWrite(&scp->rw);
                         if (scp->flags & CM_SCACHEFLAG_WAITING) {
                             osi_Log1(afsd_logp, "CM GetBuffer Waking scp 0x%p", scp);
@@ -2009,7 +2009,7 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *userp
                  * PREFETCHING flag, so the reader waiting for
                  * this buffer will start a prefetch.
                  */
-                tbufp->cmFlags |= CM_BUF_CMFULLYFETCHED;
+                _InterlockedOr(&tbufp->cmFlags, CM_BUF_CMFULLYFETCHED);
                 lock_ObtainWrite(&scp->rw);
                 if (scp->flags & CM_SCACHEFLAG_WAITING) {
                     osi_Log1(afsd_logp, "CM GetBuffer Waking scp 0x%p", scp);
index 3783710f2498de4a3758814d0eb0d73bfe591571..22d7510bbb1cb5ea328ed59aad27fd1262c6bf75 100644 (file)
@@ -161,7 +161,7 @@ long cm_RecycleSCache(cm_scache_t *scp, afs_int32 flags)
            osi_QDFree(qdp);
            if (bufp) {
                lock_ObtainMutex(&bufp->mx);
-               bufp->cmFlags &= ~CM_BUF_CMSTORING;
+               _InterlockedAnd(&bufp->cmFlags, ~CM_BUF_CMSTORING);
                bufp->flags &= ~CM_BUF_DIRTY;
                 bufp->dirty_offset = 0;
                 bufp->dirty_length = 0;
@@ -183,7 +183,7 @@ long cm_RecycleSCache(cm_scache_t *scp, afs_int32 flags)
            osi_QDFree(qdp);
            if (bufp) {
                lock_ObtainMutex(&bufp->mx);
-               bufp->cmFlags &= ~CM_BUF_CMFETCHING;
+               _InterlockedAnd(&bufp->cmFlags, ~CM_BUF_CMFETCHING);
                bufp->flags &= ~CM_BUF_DIRTY;
                 bufp->dirty_offset = 0;
                 bufp->dirty_length = 0;
@@ -1383,7 +1383,7 @@ long cm_SyncOp(cm_scache_t *scp, cm_buf_t *bufp, cm_user_t *userp, cm_req_t *req
         osi_SetQData(qdp, bufp);
 
         buf_Hold(bufp);
-        bufp->cmFlags |= CM_BUF_CMFETCHING;
+        _InterlockedOr(&bufp->cmFlags, CM_BUF_CMFETCHING);
         osi_QAdd((osi_queue_t **) &scp->bufReadsp, &qdp->q);
     }
 
@@ -1401,13 +1401,13 @@ long cm_SyncOp(cm_scache_t *scp, cm_buf_t *bufp, cm_user_t *userp, cm_req_t *req
         qdp = osi_QDAlloc();
         osi_SetQData(qdp, bufp);
         buf_Hold(bufp);
-        bufp->cmFlags |= CM_BUF_CMSTORING;
+        _InterlockedOr(&bufp->cmFlags, CM_BUF_CMSTORING);
         osi_QAdd((osi_queue_t **) &scp->bufWritesp, &qdp->q);
     }
 
     if (bufp && (flags & CM_SCACHESYNC_WRITE)) {
         /* mark the buffer as being written to. */
-        bufp->cmFlags |= CM_BUF_CMWRITING;
+        _InterlockedOr(&bufp->cmFlags, CM_BUF_CMWRITING);
     }
 
     return 0;
@@ -1456,7 +1456,7 @@ void cm_SyncOpDone(cm_scache_t *scp, cm_buf_t *bufp, afs_uint32 flags)
            osi_QDFree(qdp);
            release = 1;
        }
-        bufp->cmFlags &= ~(CM_BUF_CMFETCHING | CM_BUF_CMFULLYFETCHED);
+        _InterlockedAnd(&bufp->cmFlags, ~(CM_BUF_CMFETCHING | CM_BUF_CMFULLYFETCHED));
         if (bufp->flags & CM_BUF_WAITING) {
             osi_Log2(afsd_logp, "CM SyncOpDone FetchData Waking [scp 0x%p] bufp 0x%p", scp, bufp);
             osi_Wakeup((LONG_PTR) &bufp);
@@ -1479,7 +1479,7 @@ void cm_SyncOpDone(cm_scache_t *scp, cm_buf_t *bufp, afs_uint32 flags)
            osi_QDFree(qdp);
            release = 1;
        }
-        bufp->cmFlags &= ~CM_BUF_CMSTORING;
+        _InterlockedAnd(&bufp->cmFlags, ~CM_BUF_CMSTORING);
         if (bufp->flags & CM_BUF_WAITING) {
             osi_Log2(afsd_logp, "CM SyncOpDone StoreData Waking [scp 0x%p] bufp 0x%p", scp, bufp);
             osi_Wakeup((LONG_PTR) &bufp);
@@ -1490,7 +1490,7 @@ void cm_SyncOpDone(cm_scache_t *scp, cm_buf_t *bufp, afs_uint32 flags)
 
     if (bufp && (flags & CM_SCACHESYNC_WRITE)) {
         osi_assertx(bufp->cmFlags & CM_BUF_CMWRITING, "!CM_BUF_CMWRITING");
-        bufp->cmFlags &= ~CM_BUF_CMWRITING;
+        _InterlockedAnd(&bufp->cmFlags, ~CM_BUF_CMWRITING);
     }
 
     /* and wakeup anyone who is waiting */