]> xenbits.xensource.com Git - pvdrivers/win/xenvbd.git/commitdiff
Abort any partially completed SRBs
authorOwen Smith <owen.smith@citrix.com>
Tue, 10 Apr 2018 10:51:18 +0000 (11:51 +0100)
committerPaul Durrant <paul.durrant@citrix.com>
Tue, 10 Apr 2018 10:51:18 +0000 (11:51 +0100)
When disabling, a SRB may be comprised of requests that have been
prepared and completed. Set the SrbStatus as early as possible, so
that any partially completed SRB is always failed.

Signed-off-by: Owen Smith <owen.smith@citrix.com>
src/xenvbd/ring.c

index ef94513cfd42126f55a71afb00b6d05c5c0d604f..33b346d4acac46f5ecb7bffaade166473adaa3f9 100644 (file)
@@ -1972,13 +1972,13 @@ RingDisable(
         SrbExt = Request->SrbExt;
         Srb = SrbExt->Srb;
 
+        Srb->SrbStatus = SRB_STATUS_ABORTED;
+        Srb->ScsiStatus = 0x40; // SCSI_ABORTED
+
         RingPutRequest(Ring, Request);
 
-        if (InterlockedDecrement(&SrbExt->RequestCount) == 0) {
-            Srb->SrbStatus = SRB_STATUS_ABORTED;
-            Srb->ScsiStatus = 0x40; // SCSI_ABORTED
+        if (InterlockedDecrement(&SrbExt->RequestCount) == 0)
             AdapterCompleteSrb(Adapter, SrbExt);
-        }
     }
 }