isci: Leave requests alone if already terminating.
commit 39ea2c5b5ffaa344467da53e885cfa4ac0105050 upstream. 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: 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> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
0b06f35c02
commit
2cd24aec04
@@ -732,12 +732,20 @@ sci_io_request_terminate(struct isci_request *ireq)
|
||||
sci_change_state(&ireq->sm, SCI_REQ_ABORTING);
|
||||
return SCI_SUCCESS;
|
||||
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_COMPLETED);
|
||||
return SCI_SUCCESS;
|
||||
case SCI_REQ_ABORTING:
|
||||
sci_change_state(&ireq->sm, SCI_REQ_COMPLETED);
|
||||
return SCI_SUCCESS;
|
||||
/* If a request has a termination requested twice, return
|
||||
* a failure indication, since HW confirmation of the first
|
||||
* abort is still outstanding.
|
||||
*/
|
||||
case SCI_REQ_COMPLETED:
|
||||
default:
|
||||
dev_warn(&ireq->owning_controller->pdev->dev,
|
||||
|
||||
Reference in New Issue
Block a user