Commit 39ea2c5b authored by Jeff Skirvin's avatar Jeff Skirvin Committed by James Bottomley

[SCSI] isci: Leave requests alone if already terminating.

Instead of immediately completing any request that has a second
termination call made on it, wait for the TC done/abort HW event.
Signed-off-by: default avatarJeff Skirvin <jeffrey.d.skirvin@intel.com>
Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent 3a7bda83
...@@ -732,12 +732,20 @@ sci_io_request_terminate(struct isci_request *ireq) ...@@ -732,12 +732,20 @@ sci_io_request_terminate(struct isci_request *ireq)
sci_change_state(&ireq->sm, SCI_REQ_ABORTING); sci_change_state(&ireq->sm, SCI_REQ_ABORTING);
return SCI_SUCCESS; return SCI_SUCCESS;
case SCI_REQ_TASK_WAIT_TC_RESP: case SCI_REQ_TASK_WAIT_TC_RESP:
/* The task frame was already confirmed to have been
* sent by the SCU HW. Since the state machine is
* now only waiting for the task response itself,
* abort the request and complete it immediately
* and don't wait for the task response.
*/
sci_change_state(&ireq->sm, SCI_REQ_ABORTING); sci_change_state(&ireq->sm, SCI_REQ_ABORTING);
sci_change_state(&ireq->sm, SCI_REQ_COMPLETED); sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
return SCI_SUCCESS; return SCI_SUCCESS;
case SCI_REQ_ABORTING: case SCI_REQ_ABORTING:
sci_change_state(&ireq->sm, SCI_REQ_COMPLETED); /* If a request has a termination requested twice, return
return SCI_SUCCESS; * a failure indication, since HW confirmation of the first
* abort is still outstanding.
*/
case SCI_REQ_COMPLETED: case SCI_REQ_COMPLETED:
default: default:
dev_warn(&ireq->owning_controller->pdev->dev, dev_warn(&ireq->owning_controller->pdev->dev,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment