Commit aa145102 authored by Jeff Skirvin's avatar Jeff Skirvin Committed by Dan Williams

isci: Always set response/status for requests going into the error path.

In the case of I/O requests being failed because of a required device
reset condition, set the response and status to indicate an I/O failure.
Signed-off-by: default avatarJeff Skirvin <jeffrey.d.skirvin@intel.com>
Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
parent 50e7f9b5
...@@ -809,11 +809,11 @@ static void isci_task_save_for_upper_layer_completion( ...@@ -809,11 +809,11 @@ static void isci_task_save_for_upper_layer_completion(
/* Normal notification (task_done) */ /* Normal notification (task_done) */
dev_dbg(&host->pdev->dev, dev_dbg(&host->pdev->dev,
"%s: Normal - task = %p, response=%d, status=%d\n", "%s: Normal - task = %p, response=%d (%d), status=%d (%d)\n",
__func__, __func__,
task, task,
response, task->task_status.resp, response,
status); task->task_status.stat, status);
/* Add to the completed list. */ /* Add to the completed list. */
list_add(&request->completed_node, list_add(&request->completed_node,
&host->requests_to_complete); &host->requests_to_complete);
...@@ -827,11 +827,11 @@ static void isci_task_save_for_upper_layer_completion( ...@@ -827,11 +827,11 @@ static void isci_task_save_for_upper_layer_completion(
* already in the abort path. * already in the abort path.
*/ */
dev_warn(&host->pdev->dev, dev_warn(&host->pdev->dev,
"%s: Aborted - task = %p, response=%d, status=%d\n", "%s: Aborted - task = %p, response=%d (%d), status=%d (%d)\n",
__func__, __func__,
task, task,
response, task->task_status.resp, response,
status); task->task_status.stat, status);
/* Wake up whatever process was waiting for this /* Wake up whatever process was waiting for this
* request to complete. * request to complete.
...@@ -850,11 +850,11 @@ static void isci_task_save_for_upper_layer_completion( ...@@ -850,11 +850,11 @@ static void isci_task_save_for_upper_layer_completion(
case isci_perform_error_io_completion: case isci_perform_error_io_completion:
/* Use sas_task_abort */ /* Use sas_task_abort */
dev_warn(&host->pdev->dev, dev_warn(&host->pdev->dev,
"%s: Error - task = %p, response=%d, status=%d\n", "%s: Error - task = %p, response=%d (%d), status=%d (%d)\n",
__func__, __func__,
task, task,
response, task->task_status.resp, response,
status); task->task_status.stat, status);
/* Add to the aborted list. */ /* Add to the aborted list. */
list_add(&request->completed_node, list_add(&request->completed_node,
&host->requests_to_errorback); &host->requests_to_errorback);
...@@ -862,11 +862,11 @@ static void isci_task_save_for_upper_layer_completion( ...@@ -862,11 +862,11 @@ static void isci_task_save_for_upper_layer_completion(
default: default:
dev_warn(&host->pdev->dev, dev_warn(&host->pdev->dev,
"%s: Unknown - task = %p, response=%d, status=%d\n", "%s: Unknown - task = %p, response=%d (%d), status=%d (%d)\n",
__func__, __func__,
task, task,
response, task->task_status.resp, response,
status); task->task_status.stat, status);
/* Add to the error to libsas list. */ /* Add to the error to libsas list. */
list_add(&request->completed_node, list_add(&request->completed_node,
...@@ -1165,6 +1165,10 @@ void isci_request_io_request_complete( ...@@ -1165,6 +1165,10 @@ void isci_request_io_request_complete(
task->task_state_flags |= SAS_TASK_NEED_DEV_RESET; task->task_state_flags |= SAS_TASK_NEED_DEV_RESET;
spin_unlock_irqrestore(&task->task_state_lock, task_flags); spin_unlock_irqrestore(&task->task_state_lock, task_flags);
/* Fail the I/O. */
response = SAS_TASK_UNDELIVERED;
status = SAM_STAT_TASK_ABORTED;
complete_to_host = isci_perform_error_io_completion; complete_to_host = isci_perform_error_io_completion;
request->complete_in_target = false; request->complete_in_target = false;
break; break;
......
...@@ -302,14 +302,19 @@ isci_task_set_completion_status( ...@@ -302,14 +302,19 @@ isci_task_set_completion_status(
spin_lock_irqsave(&task->task_state_lock, flags); spin_lock_irqsave(&task->task_state_lock, flags);
task->task_status.resp = response;
task->task_status.stat = status;
/* If a device reset is being indicated, make sure the I/O /* If a device reset is being indicated, make sure the I/O
* is in the error path. * is in the error path.
*/ */
if (task->task_state_flags & SAS_TASK_NEED_DEV_RESET) if (task->task_state_flags & SAS_TASK_NEED_DEV_RESET) {
/* Fail the I/O to make sure it goes into the error path. */
response = SAS_TASK_UNDELIVERED;
status = SAM_STAT_TASK_ABORTED;
task_notification_selection = isci_perform_error_io_completion; task_notification_selection = isci_perform_error_io_completion;
}
task->task_status.resp = response;
task->task_status.stat = status;
switch (task_notification_selection) { switch (task_notification_selection) {
......
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