From: Jeff Skirvin <jeffrey.d.skirvin@intel.com>
Date: Mon, 7 Mar 2011 23:40:47 +0000 (-0700)
Subject: isci: Always set response/status for requests going into the error path.
X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=aa14510295d3d87431c915c0b2bc5dd3af7f2c35;p=GitHub%2Fexynos8895%2Fandroid_kernel_samsung_universal8895.git

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: Jeff Skirvin <jeffrey.d.skirvin@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
---

diff --git a/drivers/scsi/isci/request.c b/drivers/scsi/isci/request.c
index f19a952754b9..015643104311 100644
--- a/drivers/scsi/isci/request.c
+++ b/drivers/scsi/isci/request.c
@@ -809,11 +809,11 @@ static void isci_task_save_for_upper_layer_completion(
 
 		/* Normal notification (task_done) */
 		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__,
 			task,
-			response,
-			status);
+			task->task_status.resp, response,
+			task->task_status.stat, status);
 		/* Add to the completed list. */
 		list_add(&request->completed_node,
 			 &host->requests_to_complete);
@@ -827,11 +827,11 @@ static void isci_task_save_for_upper_layer_completion(
 		 * already in the abort path.
 		 */
 		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__,
 			 task,
-			 response,
-			 status);
+			 task->task_status.resp, response,
+			 task->task_status.stat, status);
 
 		/* Wake up whatever process was waiting for this
 		 * request to complete.
@@ -850,11 +850,11 @@ static void isci_task_save_for_upper_layer_completion(
 	case isci_perform_error_io_completion:
 		/* Use sas_task_abort */
 		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__,
 			 task,
-			 response,
-			 status);
+			 task->task_status.resp, response,
+			 task->task_status.stat, status);
 		/* Add to the aborted list. */
 		list_add(&request->completed_node,
 			 &host->requests_to_errorback);
@@ -862,11 +862,11 @@ static void isci_task_save_for_upper_layer_completion(
 
 	default:
 		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__,
 			 task,
-			 response,
-			 status);
+			 task->task_status.resp, response,
+			 task->task_status.stat, status);
 
 		/* Add to the error to libsas list. */
 		list_add(&request->completed_node,
@@ -1165,6 +1165,10 @@ void isci_request_io_request_complete(
 			task->task_state_flags |= SAS_TASK_NEED_DEV_RESET;
 			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;
 			request->complete_in_target = false;
 			break;
diff --git a/drivers/scsi/isci/task.h b/drivers/scsi/isci/task.h
index e1c9c8f04050..b84bedd94601 100644
--- a/drivers/scsi/isci/task.h
+++ b/drivers/scsi/isci/task.h
@@ -302,14 +302,19 @@ isci_task_set_completion_status(
 
 	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
 	* 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->task_status.resp = response;
+	task->task_status.stat = status;
 
 	switch (task_notification_selection) {