From 406b5036aa35dfa2b0916934daa98083f7ba7ea5 Mon Sep 17 00:00:00 2001 From: Hartmut Birr Date: Mon, 26 Sep 2005 20:00:48 +0000 Subject: [PATCH] Fixed the reinitialisation if the miniport driver returns SRB_STATUS_BUSY. svn path=/trunk/; revision=18104 --- reactos/drivers/storage/scsiport/scsiport.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/reactos/drivers/storage/scsiport/scsiport.c b/reactos/drivers/storage/scsiport/scsiport.c index 207bfe5e83d..145fb6439b1 100644 --- a/reactos/drivers/storage/scsiport/scsiport.c +++ b/reactos/drivers/storage/scsiport/scsiport.c @@ -2888,8 +2888,15 @@ SpiProcessRequests(IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, if (Srb->SrbStatus == SRB_STATUS_BUSY) { + CompleteThisRequest = FALSE; + Irp->Tail.Overlay.DriverContext[3] = Srb; + SpiRemoveActiveIrp(DeviceExtension, Irp, PrevIrp); SpiFreeSrbExtension(DeviceExtension, OriginalSrb); + + Srb->OriginalRequest = LunExtension; + Irp->Tail.Overlay.DriverContext[2] = 0; + InsertHeadList(&DeviceExtension->PendingIrpListHead, (PLIST_ENTRY)&Irp->Tail.Overlay.DriverContext[0]); DeviceExtension->PendingIrpCount++; LunExtension->PendingIrpCount++; @@ -2915,6 +2922,7 @@ SpiProcessRequests(IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, SenseInfoBuffer, sizeof(SENSE_DATA)); OriginalSrb->SrbStatus |= SRB_STATUS_AUTOSENSE_VALID; + OriginalSrb->SrbExtension = Srb->SrbExtension; ExFreePool(Srb); CompleteThisRequest = TRUE; } @@ -2933,7 +2941,7 @@ SpiProcessRequests(IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, CompleteThisRequest = FALSE; Irp->Tail.Overlay.DriverContext[3] = Srb; SpiRemoveActiveIrp(DeviceExtension, Irp, PrevIrp); - SpiFreeSrbExtension(DeviceExtension, Srb); + SpiFreeSrbExtension(DeviceExtension, OriginalSrb); Srb->OriginalRequest = LunExtension; Irp->Tail.Overlay.DriverContext[2] = 0;