ULONG SectorsLeft = Cdb_TransferBlock(Srb);
LIST_ENTRY List;
XENVBD_SG_LIST SGList;
+ ULONG DebugCount;
InitializeListHead(&List);
SrbExt->Count = 0;
if (Request == NULL)
goto fail1;
InsertTailList(&List, &Request->Entry);
+ InterlockedIncrement(&SrbExt->Count);
Request->Srb = Srb;
MaxSegments = UseIndirect(Pdo, SectorsLeft);
SectorStart += SectorsDone;
}
- SrbExt->Count = PdoQueueRequestList(Pdo, &List);
+ DebugCount = PdoQueueRequestList(Pdo, &List);
+ if (DebugCount != (ULONG)SrbExt->Count) {
+ Trace("[%u] %d != %u\n", PdoGetTargetId(Pdo), SrbExt->Count, DebugCount);
+ }
Srb->SrbStatus = SRB_STATUS_PENDING;
return TRUE;
fail2:
fail1:
PdoCancelRequestList(Pdo, &List);
+ SrbExt->Count = 0;
Srb->SrbStatus = SRB_STATUS_ERROR;
return FALSE;
}
PXENVBD_REQUEST Request;
LIST_ENTRY List;
UCHAR Operation;
+ ULONG DebugCount;
if (FrontendGetDiskInfo(Pdo->Frontend)->FlushCache)
Operation = BLKIF_OP_FLUSH_DISKCACHE;
if (Request == NULL)
goto fail1;
InsertTailList(&List, &Request->Entry);
+ InterlockedIncrement(&SrbExt->Count);
Request->Srb = Srb;
Request->Operation = Operation;
Request->FirstSector = Cdb_LogicalBlock(Srb);
- SrbExt->Count = PdoQueueRequestList(Pdo, &List);
+ DebugCount = PdoQueueRequestList(Pdo, &List);
+ if (DebugCount != (ULONG)SrbExt->Count) {
+ Trace("[%u] %d != %u\n", PdoGetTargetId(Pdo), SrbExt->Count, DebugCount);
+ }
Srb->SrbStatus = SRB_STATUS_PENDING;
return TRUE;
fail1:
PdoCancelRequestList(Pdo, &List);
+ SrbExt->Count = 0;
Srb->SrbStatus = SRB_STATUS_ERROR;
return FALSE;
}
ULONG Count = _byteswap_ushort(*(PUSHORT)Unmap->BlockDescrDataLength) / sizeof(UNMAP_BLOCK_DESCRIPTOR);
ULONG Index;
LIST_ENTRY List;
+ ULONG DebugCount;
InitializeListHead(&List);
SrbExt->Count = 0;
if (Request == NULL)
goto fail1;
InsertTailList(&List, &Request->Entry);
+ InterlockedIncrement(&SrbExt->Count);
Request->Srb = Srb;
Request->Operation = BLKIF_OP_DISCARD;
Request->Flags = 0;
}
- SrbExt->Count = PdoQueueRequestList(Pdo, &List);
+ DebugCount = PdoQueueRequestList(Pdo, &List);
+ if (DebugCount != (ULONG)SrbExt->Count) {
+ Trace("[%u] %d != %u\n", PdoGetTargetId(Pdo), SrbExt->Count, DebugCount);
+ }
Srb->SrbStatus = SRB_STATUS_PENDING;
return TRUE;
fail1:
PdoCancelRequestList(Pdo, &List);
+ SrbExt->Count = 0;
Srb->SrbStatus = SRB_STATUS_ERROR;
return FALSE;
}
)
{
PXENVBD_BLOCKRING BlockRing = FrontendGetBlockRing(Pdo->Frontend);
+ if (PdoIsPaused(Pdo)) {
+ if (QueueCount(&Pdo->PreparedReqs))
+ Warning("Target[%d] : Paused, not submitting new requests (%u)\n",
+ PdoGetTargetId(Pdo),
+ QueueCount(&Pdo->PreparedReqs));
+ return FALSE;
+ }
for (;;) {
PXENVBD_REQUEST Request;