[PATCH] SCSI: make scsi_implement_eh() generic API for SCSI transports

libata implemented a feature to schedule EH without an associated EH
by manipulating shost->host_eh_scheduled in ata_scsi_schedule_eh()
directly.  Move this function to scsi_error.c and rename it to
scsi_schedule_eh().  It is now an exported API for SCSI transports and
exported via new header file drivers/scsi/scsi_transport_api.h

This patch also de-export scsi_eh_wakeup() which was exported
specifically for ata_scsi_schedule_eh().

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
Tejun Heo
2006-05-19 21:07:05 +09:00
committed by Jeff Garzik
parent a20f33ffde
commit f8bbfc247e
6 changed files with 31 additions and 27 deletions

View File

@@ -56,7 +56,28 @@ void scsi_eh_wakeup(struct Scsi_Host *shost)
printk("Waking error handler thread\n"));
}
}
EXPORT_SYMBOL_GPL(scsi_eh_wakeup);
/**
* scsi_schedule_eh - schedule EH for SCSI host
* @shost: SCSI host to invoke error handling on.
*
* Schedule SCSI EH without scmd.
**/
void scsi_schedule_eh(struct Scsi_Host *shost)
{
unsigned long flags;
spin_lock_irqsave(shost->host_lock, flags);
if (scsi_host_set_state(shost, SHOST_RECOVERY) == 0 ||
scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY) == 0) {
shost->host_eh_scheduled++;
scsi_eh_wakeup(shost);
}
spin_unlock_irqrestore(shost->host_lock, flags);
}
EXPORT_SYMBOL_GPL(scsi_schedule_eh);
/**
* scsi_eh_scmd_add - add scsi cmd to error handling.