aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/isci/request.c
diff options
context:
space:
mode:
authorJeff Skirvin <jeffrey.d.skirvin@intel.com>2011-06-20 17:09:16 -0400
committerDan Williams <dan.j.williams@intel.com>2011-07-03 07:04:50 -0400
commit77c852f312243192b1f2ce7fc56d678784786692 (patch)
treebb0f8a9694f1f2cf4d7985ef3dc40af79963c4f7 /drivers/scsi/isci/request.c
parentf53a3a32c1e799e27f63bff7b42b4c36749e5e6f (diff)
isci: Handle timed-out request terminations correctly
In the situation where a termination of an I/O times-out, make sure that the linkage from the request to the task is severed completely. Also make sure that the selection of tasks to terminate occurs under scic_lock. Signed-off-by: Jeff Skirvin <jeffrey.d.skirvin@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/scsi/isci/request.c')
-rw-r--r--drivers/scsi/isci/request.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/scsi/isci/request.c b/drivers/scsi/isci/request.c
index 5879e5f308e6..433565c2b343 100644
--- a/drivers/scsi/isci/request.c
+++ b/drivers/scsi/isci/request.c
@@ -2741,6 +2741,15 @@ static void isci_request_io_request_complete(struct isci_host *isci_host,
2741 spin_unlock(&request->state_lock); 2741 spin_unlock(&request->state_lock);
2742 break; 2742 break;
2743 2743
2744 case dead:
2745 /* This was a terminated request that timed-out during the
2746 * termination process. There is no task to complete to
2747 * libsas.
2748 */
2749 complete_to_host = isci_perform_normal_io_completion;
2750 spin_unlock(&request->state_lock);
2751 break;
2752
2744 default: 2753 default:
2745 2754
2746 /* The request is done from an SCU HW perspective. */ 2755 /* The request is done from an SCU HW perspective. */