|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH] Fix race setting SrbStatus
SrbStatus needs to be set to PENDING right at the beginning of the
prepare functions, before the SRB has been added to any queue, otherwise
we risk a race with the completion code.
Reported-by: Andreas Kinzler <ml-ak@xxxxxxxxx>
Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
---
src/xenvbd/pdo.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/src/xenvbd/pdo.c b/src/xenvbd/pdo.c
index ee2a3cc..3ce48cc 100644
--- a/src/xenvbd/pdo.c
+++ b/src/xenvbd/pdo.c
@@ -1171,6 +1171,8 @@ PrepareReadWrite(
XENVBD_SG_LIST SGList;
ULONG DebugCount;
+ Srb->SrbStatus = SRB_STATUS_PENDING;
+
InitializeListHead(&List);
SrbExt->Count = 0;
@@ -1213,7 +1215,6 @@ PrepareReadWrite(
if (DebugCount != (ULONG)SrbExt->Count) {
Trace("[%u] %d != %u\n", PdoGetTargetId(Pdo), SrbExt->Count,
DebugCount);
}
- Srb->SrbStatus = SRB_STATUS_PENDING;
return TRUE;
fail3:
@@ -1237,6 +1238,8 @@ PrepareSyncCache(
LIST_ENTRY List;
UCHAR Operation;
ULONG DebugCount;
+
+ Srb->SrbStatus = SRB_STATUS_PENDING;
if (FrontendGetDiskInfo(Pdo->Frontend)->FlushCache)
Operation = BLKIF_OP_FLUSH_DISKCACHE;
@@ -1260,7 +1263,6 @@ PrepareSyncCache(
if (DebugCount != (ULONG)SrbExt->Count) {
Trace("[%u] %d != %u\n", PdoGetTargetId(Pdo), SrbExt->Count,
DebugCount);
}
- Srb->SrbStatus = SRB_STATUS_PENDING;
return TRUE;
fail1:
@@ -1284,6 +1286,8 @@ PrepareUnmap(
LIST_ENTRY List;
ULONG DebugCount;
+ Srb->SrbStatus = SRB_STATUS_PENDING;
+
InitializeListHead(&List);
SrbExt->Count = 0;
@@ -1308,7 +1312,6 @@ PrepareUnmap(
if (DebugCount != (ULONG)SrbExt->Count) {
Trace("[%u] %d != %u\n", PdoGetTargetId(Pdo), SrbExt->Count,
DebugCount);
}
- Srb->SrbStatus = SRB_STATUS_PENDING;
return TRUE;
fail1:
--
2.5.3
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |