]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
[SCSI] isci: SATA/STP I/O is only returned in the normal path to libsas
authorJeff Skirvin <jeffrey.d.skirvin@intel.com>
Thu, 29 Sep 2011 01:47:46 +0000 (18:47 -0700)
committerJames Bottomley <JBottomley@Parallels.com>
Sun, 2 Oct 2011 18:21:24 +0000 (13:21 -0500)
Since libsas has it's own means to escalate SATA/STP device error
handling depending on task status codes, return all SATA/STP I/O
on the normal path.

i.e. skip sas_task_abort() and let sas_ata_task_done() disposition the
qc.  Longer term we want to audit non-essential calls to
sas_task_abort().

Signed-off-by: Jeff Skirvin <jeffrey.d.skirvin@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/isci/task.h

index 4a7fa90287ef3553dc6ade693d2a1e6a2f25b19c..15b18d1589936dcdeef39a8a336f055aa549dd16 100644 (file)
@@ -286,6 +286,25 @@ isci_task_set_completion_status(
        task->task_status.resp = response;
        task->task_status.stat = status;
 
+       switch (task->task_proto) {
+
+       case SAS_PROTOCOL_SATA:
+       case SAS_PROTOCOL_STP:
+       case SAS_PROTOCOL_SATA | SAS_PROTOCOL_STP:
+
+               if (task_notification_selection
+                   == isci_perform_error_io_completion) {
+                       /* SATA/STP I/O has it's own means of scheduling device
+                       * error handling on the normal path.
+                       */
+                       task_notification_selection
+                               = isci_perform_normal_io_completion;
+               }
+               break;
+       default:
+               break;
+       }
+
        switch (task_notification_selection) {
 
        case isci_perform_error_io_completion: