Commit 9524c6821849bddad4bf592a47276cfb8a8a98c0

Authored by Dan Williams
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