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

Commit c4b9e24c authored by Jeff Skirvin's avatar Jeff Skirvin Committed by Dan Williams
Browse files

isci: don't hold scic_lock over calls to sas_task_abort()



In the case where submitted I/Os fail with the status code
SCI_FAILURE_REMOTE_DEVICE_RESET_REQUIRED, the execute function now waits
until scic_lock is cleared before calling the helper function
"isci_request_signal_device_reset" which sets the flag for the pending
reset condition on the I/O.

Signed-off-by: default avatarJeff Skirvin <jeffrey.d.skirvin@intel.com>
Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
parent 1077a574
Loading
Loading
Loading
Loading
+17 −17
Original line number Diff line number Diff line
@@ -449,6 +449,18 @@ int isci_request_execute(
			list_add(&request->dev_node,
				 &isci_device->reqs_in_process);

			if (status == SCI_SUCCESS) {
				/* Save the tag for possible task mgmt later. */
				request->io_tag = scic_io_request_get_io_tag(
						     request->sci_request_handle);
			}
		} else
			dev_warn(&isci_host->pdev->dev,
				 "%s: failed request start\n",
				 __func__);

		spin_unlock_irqrestore(&isci_host->scic_lock, flags);

		if (status ==
		    SCI_FAILURE_REMOTE_DEVICE_RESET_REQUIRED) {
			/* Signal libsas that we need the SCSI error
@@ -463,18 +475,6 @@ int isci_request_execute(
			*/
			status = SCI_SUCCESS;
		}
			else
				/* Save the tag for possible task mgmt later. */
				request->io_tag = scic_io_request_get_io_tag(
						     request->sci_request_handle);


		} else
			dev_warn(&isci_host->pdev->dev,
				 "%s: failed request start\n",
				 __func__);

		spin_unlock_irqrestore(&isci_host->scic_lock, flags);

	} else
		dev_warn(&isci_host->pdev->dev,