From: Owen Smith Date: Tue, 10 Apr 2018 10:51:18 +0000 (+0100) Subject: Abort any partially completed SRBs X-Git-Tag: 9.0.0-rc1~51 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=94b39d59e52d0a43dfa5bf74063f0c3e39d20632;p=pvdrivers%2Fwin%2Fxenvbd.git Abort any partially completed SRBs 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 --- diff --git a/src/xenvbd/ring.c b/src/xenvbd/ring.c index ef94513..33b346d 100644 --- a/src/xenvbd/ring.c +++ b/src/xenvbd/ring.c @@ -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); - } } }