Commit 9524c6821849bddad4bf592a47276cfb8a8a98c0
Committed by
James Bottomley
1 parent
5db45bdc87
[SCSI] libsas: add sas_eh_abort_handler
When recovering failed eh-cmnds let the lldd attempt an abort via scsi_abort_eh_cmnd before escalating. Reviewed-by: Jacek Danecki <jacek.danecki@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Showing 2 changed files with 22 additions and 0 deletions Side-by-side Diff
drivers/scsi/libsas/sas_scsi_host.c
... | ... | @@ -531,6 +531,27 @@ |
531 | 531 | return FAILED; |
532 | 532 | } |
533 | 533 | |
534 | +int sas_eh_abort_handler(struct scsi_cmnd *cmd) | |
535 | +{ | |
536 | + int res; | |
537 | + struct sas_task *task = TO_SAS_TASK(cmd); | |
538 | + struct Scsi_Host *host = cmd->device->host; | |
539 | + struct sas_internal *i = to_sas_internal(host->transportt); | |
540 | + | |
541 | + if (current != host->ehandler) | |
542 | + return FAILED; | |
543 | + | |
544 | + if (!i->dft->lldd_abort_task) | |
545 | + return FAILED; | |
546 | + | |
547 | + res = i->dft->lldd_abort_task(task); | |
548 | + if (res == TMF_RESP_FUNC_SUCC || res == TMF_RESP_FUNC_COMPLETE) | |
549 | + return SUCCESS; | |
550 | + | |
551 | + return FAILED; | |
552 | +} | |
553 | +EXPORT_SYMBOL_GPL(sas_eh_abort_handler); | |
554 | + | |
534 | 555 | /* Attempt to send a LUN reset message to a device */ |
535 | 556 | int sas_eh_device_reset_handler(struct scsi_cmnd *cmd) |
536 | 557 | { |
include/scsi/libsas.h
... | ... | @@ -720,6 +720,7 @@ |
720 | 720 | void sas_init_dev(struct domain_device *); |
721 | 721 | |
722 | 722 | void sas_task_abort(struct sas_task *); |
723 | +int sas_eh_abort_handler(struct scsi_cmnd *cmd); | |
723 | 724 | int sas_eh_device_reset_handler(struct scsi_cmnd *cmd); |
724 | 725 | int sas_eh_bus_reset_handler(struct scsi_cmnd *cmd); |
725 | 726 |