Fixed the reinitialisation if the miniport driver returns
SRB_STATUS_BUSY.
Modified: trunk/reactos/drivers/storage/scsiport/scsiport.c
_____
Modified: trunk/reactos/drivers/storage/scsiport/scsiport.c
--- trunk/reactos/drivers/storage/scsiport/scsiport.c 2005-09-26
19:16:43 UTC (rev 18103)
+++ trunk/reactos/drivers/storage/scsiport/scsiport.c 2005-09-26
20:00:48 UTC (rev 18104)
@@ -2888,8 +2888,15 @@
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 @@
SenseInfoBuffer,
sizeof(SENSE_DATA));
OriginalSrb->SrbStatus |=
SRB_STATUS_AUTOSENSE_VALID;
+ OriginalSrb->SrbExtension = Srb->SrbExtension;
ExFreePool(Srb);
CompleteThisRequest = TRUE;
}
@@ -2933,7 +2941,7 @@
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;