[PATCH] libata-eh-fw: implement new EH scheduling via error completion
authorTejun Heo <htejun@gmail.com>
Mon, 15 May 2006 11:58:05 +0000 (20:58 +0900)
committerTejun Heo <htejun@gmail.com>
Mon, 15 May 2006 11:58:05 +0000 (20:58 +0900)
commitf686bcb8078ac7505ec88818886c2c72639f4fc5
tree7c563e0032b2d85b631b617b8bb2a7a648607468
parentf69499f42caf74194df678c9c293f2ee0fe90bc3
[PATCH] libata-eh-fw: implement new EH scheduling via error completion

There are several ways a qc can get schedule for EH in new EH.  This
patch implements one of them - completing a qc with ATA_QCFLAG_FAILED
set or with non-zero qc->err_mask.  ALL such qc's are examined by EH.

New EH schedules a qc for EH from completion iff ->error_handler is
implemented, qc is marked as failed or qc->err_mask is non-zero and
the command is not an internal command (internal cmd is handled via
->post_internal_cmd).  The EH scheduling itself is performed by asking
SCSI midlayer to schedule EH for the specified scmd.

For drivers implementing old-EH, nothing changes.  As this change
makes ata_qc_complete() rather large, it's not inlined anymore and
__ata_qc_complete() is exported to other parts of libata for later
use.

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