|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH] Account for rewinding requests
When requests are rewound to the fresh queue during resume from suspend,
decrement the Outstanding stat so that an ASSERT is not triggered.
Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
---
src/xenvbd/blockring.c | 21 +++++++++++++++++++++
src/xenvbd/blockring.h | 6 ++++++
src/xenvbd/pdo.c | 4 +++-
3 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/src/xenvbd/blockring.c b/src/xenvbd/blockring.c
index d0b960a..28f1393 100644
--- a/src/xenvbd/blockring.c
+++ b/src/xenvbd/blockring.c
@@ -589,3 +589,24 @@ BlockRingSubmit(
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);
+}
diff --git a/src/xenvbd/blockring.h b/src/xenvbd/blockring.h
index 1117d73..4c94b6c 100644
--- a/src/xenvbd/blockring.h
+++ b/src/xenvbd/blockring.h
@@ -94,4 +94,10 @@ BlockRingSubmit(
IN PXENVBD_REQUEST Request
);
+extern VOID
+BlockRingAbort(
+ IN PXENVBD_BLOCKRING BlockRing,
+ IN PXENVBD_REQUEST Request
+ );
+
#endif // _XENVBD_BLOCKRING_H
diff --git a/src/xenvbd/pdo.c b/src/xenvbd/pdo.c
index 76b0112..c5ec9b6 100644
--- a/src/xenvbd/pdo.c
+++ b/src/xenvbd/pdo.c
@@ -1714,7 +1714,8 @@ PdoPreResume(
__in PXENVBD_PDO Pdo
)
{
- LIST_ENTRY List;
+ LIST_ENTRY List;
+ PXENVBD_BLOCKRING BlockRing = FrontendGetBlockRing(Pdo->Frontend);
InitializeListHead(&List);
@@ -1728,6 +1729,7 @@ PdoPreResume(
Request = CONTAINING_RECORD(Entry, XENVBD_REQUEST, Entry);
SrbExt = GetSrbExt(Request->Srb);
+ BlockRingAbort(BlockRing, Request);
RequestCleanup(Pdo, Request);
__LookasideFree(&Pdo->RequestList, Request);
--
1.9.4.msysgit.1
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |