Index: /trunk/src/VBox/Devices/Storage/DrvVD.cpp
===================================================================
--- /trunk/src/VBox/Devices/Storage/DrvVD.cpp	(revision 65346)
+++ /trunk/src/VBox/Devices/Storage/DrvVD.cpp	(revision 65347)
@@ -2757,5 +2757,6 @@
         RTListForEach(&pThis->aIoReqAllocBins[idxBin].LstIoReqAlloc, pIt, PDMMEDIAEXIOREQINT, NdAllocatedList)
         {
-            if (RT_UNLIKELY(pIt->uIoReqId == pIoReq->uIoReqId))
+            if (RT_UNLIKELY(   pIt->uIoReqId == pIoReq->uIoReqId
+                            && pIt->enmState != VDIOREQSTATE_CANCELED))
             {
                 rc = VERR_PDM_MEDIAEX_IOREQID_CONFLICT;
@@ -3500,5 +3501,5 @@
 static bool drvvdMediaExIoReqCancel(PVBOXDISK pThis, PPDMMEDIAEXIOREQINT pIoReq)
 {
-    bool fXchg = true;
+    bool fXchg = false;
     VDIOREQSTATE enmStateOld = (VDIOREQSTATE)ASMAtomicReadU32((volatile uint32_t *)&pIoReq->enmState);
 
@@ -3515,6 +3516,8 @@
     {
         fXchg = ASMAtomicCmpXchgU32((volatile uint32_t *)&pIoReq->enmState, VDIOREQSTATE_CANCELED, enmStateOld);
-        if (!fXchg)
-            enmStateOld = (VDIOREQSTATE)ASMAtomicReadU32((volatile uint32_t *)&pIoReq->enmState);
+        if (fXchg)
+            break;
+
+        enmStateOld = (VDIOREQSTATE)ASMAtomicReadU32((volatile uint32_t *)&pIoReq->enmState);
     }
 
