[PATCH] libata: implement ata_scsi_timed_out()
authorTejun Heo <htejun@gmail.com>
Fri, 10 Feb 2006 06:10:48 +0000 (15:10 +0900)
committerJeff Garzik <jgarzik@pobox.com>
Fri, 10 Feb 2006 11:50:46 +0000 (06:50 -0500)
commitf29841e08fa20a7f2c8bc1b70306975299c66ee7
treec2f6c87cf79fbd36ec49ea3c2247a382da5d75cc
parent341963b909a01d2f38d86f5db8dd1f8c80bd6dbf
[PATCH] libata: implement ata_scsi_timed_out()

Implement ata_scsi_timed_out(), to be used as
scsi_host_template->eh_timed_out callback for all libata drivers.
Without this function, the following race exists.

If a qc completes after SCSI timer expires but before libata EH kicks
in, the qc gets completed but the scsicmd still gets passed to libata
EH resulting in ->eng_timeout invocation with NULL qc, which none is
handling properly.

This patch makes sure that scmd and qc share the same lifetime.
Original idea from Jeff Garzik <jgarzik@pobox.com>.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
drivers/scsi/libata-core.c
drivers/scsi/libata-scsi.c
include/linux/libata.h