8ecec21da6
Fix a few panics during error recovery: 1) Stupid mistake in the "no SCB match handler" where I was using the wrong variable (busy_scbid instead of scb_index). 2) Unbusy the target of an abort request if the command we are trying to abort is an untagged transaction. If we don't, we get a fatal NO_MATCH_BUSY condition which "should never happen". 3) When an abort completes, turn off ahc->in_timeout or else the next timeout will hit the protective "scb timesout again" panic. 4) Fix a typo that caused the requeued "abort" SCB to have its TAG_ENB and disconnect bits to be cleared (missing ~) so that devices would complain about overlapped commands. Be sure to turn off the unexpected busfree interrupt after we do a bus reset since we are expecting the bus to go free in that case. Return XS_TIMEOUT instead of XS_DRIVERSTUFFUP in certain scenarios. XS_TIMEOUT allows for retries, XS_DRIVERSTUFFUP does not. Allow commands with SDTR and WDTR negotiation to be tagged. The SCSI II spec says that you probably should not do this for fear of hitting bogus devices. The driver did this in the past for almost two years without any problem, and not doing it causes problems during error recovery to a tag capable device as the number of openings is higher than two and we'll start sending it tagged commands causing "overlapped commands attempted" type errors. The real fix needs to happen in the generic SCSI layer which can limit the number and type of transactions to a device during error recovery efficiently. Give ourselves at least 100ms to perform a request sense instead of relying on the original timeout to be long enough to complete this new command as well as the one that generated the condition. Removed some redundant code. |
||
---|---|---|
.. | ||
apm | ||
bios | ||
boot | ||
conf | ||
eisa | ||
i386 | ||
ibcs2 | ||
include | ||
isa | ||
linux | ||
pci | ||
scsi | ||
Makefile |