Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -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,