scsi_reset() asks the host adapter driver to reset
the SCSI bus or a SCSI target as specified by level. If level equals RESET_ALL,
the SCSI bus is reset. If it equals RESET_TARGET, ap
is used to determine the target to be reset.
scsi_reset() asks the host adapter driver to reset
the SCSI bus or a SCSI target as specified by level. If level equals RESET_ALL, the SCSI bus is reset. If it equals RESET_TARGET, ap is used to determine the target to
be reset.
Note that, at the point when scsi_reset() resets
the target (case RESET_TARGET) or the bus (case RESET_ALL), there might be one or more command packets outstanding.
That is, packets have been passed to scsi_transport(),
and queued or possibly transported, but the commands have not been completed
and the target completion routine has not been called for those packets.
The successful call to scsi_reset() has the side
effect that any such commands currently outstanding are aborted, at which
point the packets are marked with pkt_reason set to CMD_RESET, and the appropriate bit -- either STAT_BUS_RESET or STAT_DEV_RESET -- is set in pkt_statistics. Once thus appropriately marked, the aborted command packets
are passed to the target driver command completion routine.
Also note that, at the moment that a thread executing scsi_reset() actually resets the target or the bus, it is possible that a
second thread may have already called scsi_transport(),
but not yet queued or transported its command. In this case the HBA will
not yet have received the second thread's packet and this packet will not
be aborted.
|