- Revert 27476: another attempt (previously, dgorbachev tried to "fix" this code) to double-release spinlocks. There are even comments in some uncertain cases about this.

For future generations: Have a look at SpiGetNextLunRequest(), it's full of KeReleaseSpinLock()s.

svn path=/trunk/; revision=28980
This commit is contained in:
Aleksey Bragin 2007-09-09 14:45:38 +00:00
parent 45acb6f960
commit 6481e255c2

View file

@ -2527,7 +2527,6 @@ ScsiPortDispatchScsi(IN PDEVICE_OBJECT DeviceObject,
{
/* Get next logical unit request */
SpiGetNextRequestFromLun(DeviceExtension, LunExtension);
KeReleaseSpinLock(&DeviceExtension->SpinLock, Irql);
/* SpiGetNextRequestFromLun() releases the spinlock */
KeLowerIrql(Irql);
@ -4167,7 +4166,6 @@ SpiProcessCompletedRequest(IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension,
{
/* Start the next packet */
SpiGetNextRequestFromLun(DeviceExtension, LunExtension);
KeReleaseSpinLockFromDpcLevel(&DeviceExtension->SpinLock);
}
else
{
@ -4175,7 +4173,7 @@ SpiProcessCompletedRequest(IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension,
KeReleaseSpinLockFromDpcLevel(&DeviceExtension->SpinLock);
}
DPRINT("IoCompleting request IRP 0x%08p\n", Irp);
DPRINT("IoCompleting request IRP 0x%p\n", Irp);
IoCompleteRequest(Irp, IO_DISK_INCREMENT);
@ -4283,10 +4281,7 @@ Error:
&& (Srb->SrbFlags & SRB_FLAGS_NO_QUEUE_FREEZE))
{
if (LunExtension->RequestTimeout == -1)
{
SpiGetNextRequestFromLun(DeviceExtension, LunExtension);
KeReleaseSpinLockFromDpcLevel(&DeviceExtension->SpinLock);
}
else
KeReleaseSpinLockFromDpcLevel(&DeviceExtension->SpinLock);
}