lock_ObtainWrite(&scp->rw);
rxheld = 1;
}
- bp->cmFlags &= ~CM_BUF_CMBKGFETCH;
+ _InterlockedAnd(&bp->cmFlags, ~CM_BUF_CMBKGFETCH);
buf_Release(bp);
bp = NULL;
continue;
if (code == 0)
fetched = LargeIntegerAdd(fetched, tblocksize);
buf_Release(bp);
- bp->cmFlags &= ~CM_BUF_CMBKGFETCH;
+ _InterlockedAnd(&bp->cmFlags, ~CM_BUF_CMBKGFETCH);
}
if (!rxheld) {
{
bp = buf_Find(scp, &offset);
if (bp) {
- bp->cmFlags &= ~CM_BUF_CMBKGFETCH;
+ _InterlockedAnd(&bp->cmFlags, ~CM_BUF_CMBKGFETCH);
buf_Release(bp);
}
}
rwheld = 1;
}
- bp->cmFlags |= CM_BUF_CMBKGFETCH;
+ _InterlockedOr(&bp->cmFlags, CM_BUF_CMBKGFETCH);
buf_Release(bp);
}
* 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);
* 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);
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;
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;
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);
}
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;
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);
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);
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 */