code = cm_GetBuffer(scp, bufp, NULL, userp, reqp);
if (code == 0) {
- if (bufp->flags & CM_BUF_DIRTY) {
- if (rwheld) {
- lock_ReleaseWrite(&scp->rw);
- rwheld = 0;
- }
- cm_BufWrite(scp, &bufp->offset, cm_chunkSize, 0, userp, reqp);
- }
+ if (bufp->flags & CM_BUF_DIRTY)
+ cm_BufWrite(scp, &bufp->offset, cm_chunkSize, CM_BUF_WRITE_SCP_LOCKED, userp, reqp);
if (!(bufp->qFlags & CM_BUF_QREDIR)) {
#ifdef VALIDATE_CHECK_SUM
char dbgstr[1024];
#endif
#endif
- if (!rwheld) {
- lock_ObtainWrite(&scp->rw);
- rwheld = 1;
- }
lock_ObtainWrite(&buf_globalLock);
if (!(bufp->flags & CM_BUF_DIRTY) &&
bufp->cmFlags == 0 &&
!(bufp->qFlags & CM_BUF_QREDIR)) {
buf_InsertToRedirQueue(scp, bufp);
lock_ReleaseWrite(&buf_globalLock);
- lock_ReleaseWrite(&scp->rw);
- rwheld = 0;
#ifdef VALIDATE_CHECK_SUM
buf_ComputeCheckSum(bufp);
osi_Log4(afsd_logp, "RDR_BkgFetch Extent2FS Already held by Redirector bufp 0x%p foffset 0x%p coffset 0x%p len 0x%x",
bufp, bufp->offset.QuadPart, bufp->datap - RDR_extentBaseAddress, cm_data.blockSize);
}
-
- if (rwheld) {
- lock_ReleaseWrite(&scp->rw);
- rwheld = 0;
- }
-
} else {
/*
* depending on what the error from cm_GetBuffer is
char dbgstr[1024];
#endif
#endif
- lock_ObtainWrite(&scp->rw);
lock_ObtainWrite(&buf_globalLock);
if (!(bufp->qFlags & CM_BUF_QREDIR)) {
buf_InsertToRedirQueue(scp, bufp);
lock_ReleaseWrite(&buf_globalLock);
- lock_ReleaseWrite(&scp->rw);
#ifdef VALIDATE_CHECK_SUM
buf_ComputeCheckSum(bufp);
* However, we know the buffer is in recent use so move the buffer to the
* front of the queue
*/
- lock_ObtainWrite(&scp->rw);
lock_ObtainWrite(&buf_globalLock);
buf_MoveToHeadOfRedirQueue(scp, bufp);
lock_ReleaseWrite(&buf_globalLock);
- lock_ReleaseWrite(&scp->rw);
osi_Log4(afsd_logp, "RDR_RequestFileExtentsAsync Extent2FS Already held by Redirector bufp 0x%p foffset 0x%p coffset 0x%p len 0x%x",
bufp, ByteOffset.QuadPart, bufp->datap - RDR_extentBaseAddress, cm_data.blockSize);
pExtent->CacheOffset.LowPart);
/* Move the buffer to the front of the queue */
- if (scp)
- lock_ObtainWrite(&scp->rw);
lock_ObtainWrite(&buf_globalLock);
buf_MoveToHeadOfRedirQueue(scp, bufp);
lock_ReleaseWrite(&buf_globalLock);
- if (scp)
- lock_ReleaseWrite(&scp->rw);
buf_Release(bufp);
continue;
}
(pExtent->Flags & AFS_EXTENT_FLAG_RELEASE) )
{
if (bufp->qFlags & CM_BUF_QREDIR) {
- if (scp)
- lock_ObtainWrite(&scp->rw);
lock_ObtainWrite(&buf_globalLock);
if (bufp->qFlags & CM_BUF_QREDIR) {
buf_RemoveFromRedirQueue(scp, bufp);
- lock_ReleaseWrite(&scp->rw);
buf_ReleaseLocked(bufp, TRUE);
- } else {
- if (scp)
- lock_ReleaseWrite(&scp->rw);
}
- if (scp)
- lock_ReleaseWrite(&buf_globalLock);
+ lock_ReleaseWrite(&buf_globalLock);
}
#ifdef ODS_DEBUG
snprintf( dbgstr, 1024,
pExtent->CacheOffset.LowPart);
/* Move the buffer to the front of the queue */
- if (scp)
- lock_ObtainWrite(&scp->rw);
lock_ObtainWrite(&buf_globalLock);
buf_MoveToHeadOfRedirQueue(scp, bufp);
lock_ReleaseWrite(&buf_globalLock);
- if (scp)
- lock_ReleaseWrite(&scp->rw);
buf_Release(bufp);
continue;
}
(pExtent->Flags & AFS_EXTENT_FLAG_RELEASE) )
{
if (bufp->qFlags & CM_BUF_QREDIR) {
- if (scp)
- lock_ObtainWrite(&scp->rw);
lock_ObtainWrite(&buf_globalLock);
if (bufp->qFlags & CM_BUF_QREDIR) {
buf_RemoveFromRedirQueue(scp, bufp);
- if (scp)
- lock_ReleaseWrite(&scp->rw);
buf_ReleaseLocked(bufp, TRUE);
- } else {
- if (scp)
- lock_ReleaseWrite(&scp->rw);
}
lock_ReleaseWrite(&buf_globalLock);
}
lock_ObtainMutex(&bufp->mx);
if (bufp->qFlags & CM_BUF_QREDIR) {
- if (scp)
- lock_ObtainWrite(&scp->rw);
lock_ObtainWrite(&buf_globalLock);
if (bufp->qFlags & CM_BUF_QREDIR) {
buf_RemoveFromRedirQueue(scp, bufp);
- if (scp)
- lock_ReleaseWrite(&scp->rw);
buf_ReleaseLocked(bufp, TRUE);
- } else {
- if (scp)
- lock_ReleaseWrite(&scp->rw);
}
lock_ReleaseWrite(&buf_globalLock);
}