}
#undef C
+static enum sci_status sci_remote_device_suspend(struct isci_remote_device *idev)
+{
+ return sci_remote_node_context_suspend(&idev->rnc,
+ SCI_SOFTWARE_SUSPENSION,
+ SCI_SOFTWARE_SUSPEND_EXPECTED_EVENT,
+ NULL, NULL);
+}
+
/**
* isci_remote_device_not_ready() - This function is called by the ihost when
* the remote device is not ready. We mark the isci device as ready (not
case SCIC_REMOTE_DEVICE_NOT_READY_SATA_SDB_ERROR_FIS_RECEIVED:
set_bit(IDEV_IO_NCQERROR, &idev->flags);
+ /* Suspend the remote device so the I/O can be terminated. */
+ sci_remote_device_suspend(idev);
+
/* Kill all outstanding requests for the device. */
list_for_each_entry(ireq, &idev->reqs_in_process, dev_node) {
"%s: isci_device = %p request = %p\n",
__func__, idev, ireq);
- sci_controller_terminate_request(ihost,
- idev,
- ireq);
+ sci_controller_terminate_request(ihost, idev, ireq);
}
/* Fall through into the default case... */
default:
wake_up(&ihost->eventq);
}
-static enum sci_status sci_remote_device_suspend(
- struct isci_remote_device *idev)
-{
- return sci_remote_node_context_suspend(
- &idev->rnc,
- SCI_SOFTWARE_SUSPENSION,
- SCI_SOFTWARE_SUSPEND_EXPECTED_EVENT,
- NULL, NULL);
-}
-
static int isci_remote_device_suspendcheck(struct isci_remote_device *idev)
{
return test_bit(IDEV_TXRX_SUSPENDED, &idev->flags)