Jeff Garzik wrote: > Hannes Reinecke wrote: >> +static void scsi_invoke_strategy_handler(struct Scsi_Host *shost) >> +{ >> + int rtn; >> + struct list_head *lh, *lh_sf; >> + struct scsi_cmnd *scmd; >> + unsigned long flags; >> + LIST_HEAD(eh_work_q); >> + LIST_HEAD(eh_done_q); >> + >> + rtn = shost->hostt->eh_strategy_handler(shost); >> + >> + spin_lock_irqsave(shost->host_lock, flags); >> + list_splice_init(&shost->eh_cmd_q, &eh_work_q); >> + spin_unlock_irqrestore(shost->host_lock, flags); >> + >> + SCSI_LOG_ERROR_RECOVERY(1, scsi_eh_prt_fail_stats(shost, >> &eh_work_q)); >> + >> + list_for_each_safe(lh, lh_sf, &eh_work_q) { >> + scmd = list_entry(lh, struct scsi_cmnd, eh_entry); >> + >> + if (scsi_eh_eflags_chk(scmd, SCSI_EH_CANCEL_CMD) || >> + !SCSI_SENSE_VALID(scmd)) >> + continue; >> + scmd->retries = scmd->allowed; >> + scsi_eh_finish_cmd(scmd, &eh_done_q); >> + } >> + >> + if (!list_empty(&eh_work_q)) >> + if (!scsi_eh_abort_cmds(&eh_work_q, &eh_done_q)) >> + scsi_eh_ready_devs(shost, &eh_work_q, &eh_done_q); > > > The scsi_eh_abort_cmds() call doesn't do much, since all calls to > scsi_try_to_abort_cmd() will fail due to libata's lack of EH abort handler. > Yeah, noticed that one, too. Sometimes after I did the patch. The main point of the patch is that the eh_work_q _has_ to be emptied, regardless whether we can do something with the command. Otherwise it will always kick in and try to abort the command. > The latter code will print "aborting cmd failed" for the command, and > not much else. > You are correct; the correct way of doing things would be to abort the SATA commands or, failing that, reset the device/bus/adapter. Only from reading the source I got the impression that the only reset method is a full bus reset. And the spec only added to the confusion. So I left it there, as this point was never reached anyway. After sorting out issue with ATAPI commands not having a proper sense code (patch by Albert Lee regarding completing a command twice) the error handler could actually _do_ something with the failed command. Afterwards all cmds would be removed all command from the queue and everyone was happy. Cheers, Hannes -- Dr. Hannes Reinecke hare@xxxxxxx SuSE Linux AG S390 & zSeries Maxfeldstraße 5 +49 911 74053 688 90409 Nürnberg http://www.suse.de - : send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html