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);
+}
IN PXENVBD_REQUEST Request
);
+extern VOID
+BlockRingAbort(
+ IN PXENVBD_BLOCKRING BlockRing,
+ IN PXENVBD_REQUEST Request
+ );
+
#endif // _XENVBD_BLOCKRING_H
__in PXENVBD_PDO Pdo
)
{
- LIST_ENTRY List;
+ LIST_ENTRY List;
+ PXENVBD_BLOCKRING BlockRing = FrontendGetBlockRing(Pdo->Frontend);
InitializeListHead(&List);
Request = CONTAINING_RECORD(Entry, XENVBD_REQUEST, Entry);
SrbExt = GetSrbExt(Request->Srb);
+ BlockRingAbort(BlockRing, Request);
RequestCleanup(Pdo, Request);
__LookasideFree(&Pdo->RequestList, Request);