diff options
Diffstat (limited to 'drivers/scsi/libsas/sas_scsi_host.c')
-rw-r--r-- | drivers/scsi/libsas/sas_scsi_host.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/scsi/libsas/sas_scsi_host.c b/drivers/scsi/libsas/sas_scsi_host.c index 9a7aaf5f131..67758ea8eb7 100644 --- a/drivers/scsi/libsas/sas_scsi_host.c +++ b/drivers/scsi/libsas/sas_scsi_host.c | |||
@@ -663,11 +663,16 @@ void sas_scsi_recover_host(struct Scsi_Host *shost) | |||
663 | * scsi_unjam_host does, but we skip scsi_eh_abort_cmds because any | 663 | * scsi_unjam_host does, but we skip scsi_eh_abort_cmds because any |
664 | * command we see here has no sas_task and is thus unknown to the HA. | 664 | * command we see here has no sas_task and is thus unknown to the HA. |
665 | */ | 665 | */ |
666 | if (!scsi_eh_get_sense(&eh_work_q, &ha->eh_done_q)) | 666 | if (!sas_ata_eh(shost, &eh_work_q, &ha->eh_done_q)) |
667 | scsi_eh_ready_devs(shost, &eh_work_q, &ha->eh_done_q); | 667 | if (!scsi_eh_get_sense(&eh_work_q, &ha->eh_done_q)) |
668 | scsi_eh_ready_devs(shost, &eh_work_q, &ha->eh_done_q); | ||
668 | 669 | ||
669 | out: | 670 | out: |
671 | /* now link into libata eh --- if we have any ata devices */ | ||
672 | sas_ata_strategy_handler(shost); | ||
673 | |||
670 | scsi_eh_flush_done_q(&ha->eh_done_q); | 674 | scsi_eh_flush_done_q(&ha->eh_done_q); |
675 | |||
671 | SAS_DPRINTK("--- Exit %s\n", __func__); | 676 | SAS_DPRINTK("--- Exit %s\n", __func__); |
672 | return; | 677 | return; |
673 | } | 678 | } |
@@ -676,6 +681,11 @@ enum blk_eh_timer_return sas_scsi_timed_out(struct scsi_cmnd *cmd) | |||
676 | { | 681 | { |
677 | struct sas_task *task = TO_SAS_TASK(cmd); | 682 | struct sas_task *task = TO_SAS_TASK(cmd); |
678 | unsigned long flags; | 683 | unsigned long flags; |
684 | enum blk_eh_timer_return rtn; | ||
685 | |||
686 | if (sas_ata_timed_out(cmd, task, &rtn)) | ||
687 | return rtn; | ||
688 | |||
679 | 689 | ||
680 | if (!task) { | 690 | if (!task) { |
681 | cmd->request->timeout /= 2; | 691 | cmd->request->timeout /= 2; |