diff options
author | Jeff Skirvin <jeffrey.d.skirvin@intel.com> | 2011-06-20 17:09:16 -0400 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2011-07-03 07:04:50 -0400 |
commit | 77c852f312243192b1f2ce7fc56d678784786692 (patch) | |
tree | bb0f8a9694f1f2cf4d7985ef3dc40af79963c4f7 /drivers/scsi/isci/request.c | |
parent | f53a3a32c1e799e27f63bff7b42b4c36749e5e6f (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.c | 9 |
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. */ |