--- Tejun Heo <htejun@xxxxxxxxx> wrote: > This patch implements scsi_eh_schedule_cmd() which provides a way to > directly invoke SCSI EH from drivers implementing > ->eh_strategy_handler. Combined with scsi_eh_flush_done_q(), this > gives such drivers complete control over when and how to invoke EH and > handle failed commands. Hi Tejun, I sent an almost identical patch, albeit much more general, see this: http://marc.theaimsgroup.com/?l=linux-scsi&m=113833937421677&w=2 Here is the core of it: --start-quote-- This function requests that SCSI Core start recovery for the command by deleting the timer and adding the command to the eh queue. It can be called by either LLDDs or SCSI Core. LLDDs who implement their own error recovery MAY ignore the timeout event if they generated scsi_req_abort_cmd. void scsi_req_abort_cmd(struct scsi_cmnd *cmd) { if (!scsi_delete_timer(cmd)) return; scsi_times_out(cmd); } --end-quote--- To have a consistent and complete error recovery solution, given the current SCSI Core infrastructure, as is requred for your SATA effort, and other (protocol) work, this is what one needs to implement: 1. eh_timed_out(), 2. eh_strategy_handler(), 3. scsi_req_abort_cmd() (as shown above), and finally, 4. scsi_req_dev_reset(). I keep those in my own git trees. (Had 3 been accepted, I would've sent 4.) Beware, Bottomley will most likely have his own ideas on error recovery, as he did when I posted my patch above. I didn't bother to explain, from a protocol point of view, why it is needed. Good luck! Luben - : 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