ULONG DeviceId;
ULONG Order;
PVOID Grants[XENVBD_MAX_RING_PAGES];
- ULONG Outstanding;
ULONG Submitted;
ULONG Received;
};
break;
}
++BlockRing->Submitted;
- ++BlockRing->Outstanding;
}
NTSTATUS
PXENVBD_GRANTER Granter = FrontendGetGranter(BlockRing->Frontend);
ASSERT(BlockRing->Connected == TRUE);
- ASSERT3U(BlockRing->Outstanding, ==, 0);
BlockRing->Submitted = 0;
BlockRing->Received = 0;
PXENVBD_GRANTER Granter = FrontendGetGranter(BlockRing->Frontend);
XENBUS_DEBUG(Printf, Debug,
- "BLOCKRING: Requests : %d / %d / %d\n",
- BlockRing->Outstanding,
+ "BLOCKRING: Requests : %d / %d\n",
BlockRing->Submitted,
BlockRing->Received);
if (__BlockRingPutTag(BlockRing, Response->id, &Tag)) {
++BlockRing->Received;
- --BlockRing->Outstanding;
PdoCompleteResponse(Pdo, Tag, Response->status);
}
return TRUE;
}
-
-VOID
-BlockRingAbort(
- IN PXENVBD_BLOCKRING BlockRing,
- IN PXENVBD_REQUEST Request
- )
-{
- KIRQL Irql;
-
- UNREFERENCED_PARAMETER(Request);
-
- KeAcquireSpinLock(&BlockRing->Lock, &Irql);
-
- // Should check Request is present on the ring, but
- // the shared page(s) may not contain any valid data,
- // due to suspend/resume
- ASSERT3U(BlockRing->Outstanding, >, 0);
- --BlockRing->Outstanding;
-
- KeReleaseSpinLock(&BlockRing->Lock, Irql);
-}
)
{
LIST_ENTRY List;
- PXENVBD_BLOCKRING BlockRing = FrontendGetBlockRing(Pdo->Frontend);
-
+
InitializeListHead(&List);
// pop all submitted requests, cleanup and add associated SRB to a list
Request = CONTAINING_RECORD(Entry, XENVBD_REQUEST, Entry);
SrbExt = GetSrbExt(Request->Srb);
- BlockRingAbort(BlockRing, Request);
RequestCleanup(Pdo, Request);
__LookasideFree(&Pdo->RequestList, Request);