diff options
| -rw-r--r-- | drivers/scsi/isci/request.c | 48 | ||||
| -rw-r--r-- | drivers/scsi/isci/request.h | 12 | ||||
| -rw-r--r-- | drivers/scsi/isci/task.c | 23 |
3 files changed, 36 insertions, 47 deletions
diff --git a/drivers/scsi/isci/request.c b/drivers/scsi/isci/request.c index 55859d5331b1..27376ba22483 100644 --- a/drivers/scsi/isci/request.c +++ b/drivers/scsi/isci/request.c | |||
| @@ -2183,7 +2183,7 @@ static void isci_request_set_open_reject_status( | |||
| 2183 | enum sas_open_rej_reason open_rej_reason) | 2183 | enum sas_open_rej_reason open_rej_reason) |
| 2184 | { | 2184 | { |
| 2185 | /* Task in the target is done. */ | 2185 | /* Task in the target is done. */ |
| 2186 | request->complete_in_target = true; | 2186 | set_bit(IREQ_COMPLETE_IN_TARGET, &request->flags); |
| 2187 | *response_ptr = SAS_TASK_UNDELIVERED; | 2187 | *response_ptr = SAS_TASK_UNDELIVERED; |
| 2188 | *status_ptr = SAS_OPEN_REJECT; | 2188 | *status_ptr = SAS_OPEN_REJECT; |
| 2189 | *complete_to_host_ptr = isci_perform_normal_io_completion; | 2189 | *complete_to_host_ptr = isci_perform_normal_io_completion; |
| @@ -2248,7 +2248,7 @@ static void isci_request_handle_controller_specific_errors( | |||
| 2248 | else | 2248 | else |
| 2249 | *status_ptr = SAS_ABORTED_TASK; | 2249 | *status_ptr = SAS_ABORTED_TASK; |
| 2250 | 2250 | ||
| 2251 | request->complete_in_target = true; | 2251 | set_bit(IREQ_COMPLETE_IN_TARGET, &request->flags); |
| 2252 | 2252 | ||
| 2253 | *complete_to_host_ptr = | 2253 | *complete_to_host_ptr = |
| 2254 | isci_perform_normal_io_completion; | 2254 | isci_perform_normal_io_completion; |
| @@ -2261,7 +2261,7 @@ static void isci_request_handle_controller_specific_errors( | |||
| 2261 | else | 2261 | else |
| 2262 | *status_ptr = SAM_STAT_TASK_ABORTED; | 2262 | *status_ptr = SAM_STAT_TASK_ABORTED; |
| 2263 | 2263 | ||
| 2264 | request->complete_in_target = false; | 2264 | clear_bit(IREQ_COMPLETE_IN_TARGET, &request->flags); |
| 2265 | 2265 | ||
| 2266 | *complete_to_host_ptr = | 2266 | *complete_to_host_ptr = |
| 2267 | isci_perform_error_io_completion; | 2267 | isci_perform_error_io_completion; |
| @@ -2292,7 +2292,7 @@ static void isci_request_handle_controller_specific_errors( | |||
| 2292 | else | 2292 | else |
| 2293 | *status_ptr = SAS_ABORTED_TASK; | 2293 | *status_ptr = SAS_ABORTED_TASK; |
| 2294 | 2294 | ||
| 2295 | request->complete_in_target = true; | 2295 | set_bit(IREQ_COMPLETE_IN_TARGET, &request->flags); |
| 2296 | 2296 | ||
| 2297 | *complete_to_host_ptr = isci_perform_normal_io_completion; | 2297 | *complete_to_host_ptr = isci_perform_normal_io_completion; |
| 2298 | break; | 2298 | break; |
| @@ -2397,11 +2397,11 @@ static void isci_request_handle_controller_specific_errors( | |||
| 2397 | *status_ptr = SAM_STAT_TASK_ABORTED; | 2397 | *status_ptr = SAM_STAT_TASK_ABORTED; |
| 2398 | 2398 | ||
| 2399 | if (task->task_proto == SAS_PROTOCOL_SMP) { | 2399 | if (task->task_proto == SAS_PROTOCOL_SMP) { |
| 2400 | request->complete_in_target = true; | 2400 | set_bit(IREQ_COMPLETE_IN_TARGET, &request->flags); |
| 2401 | 2401 | ||
| 2402 | *complete_to_host_ptr = isci_perform_normal_io_completion; | 2402 | *complete_to_host_ptr = isci_perform_normal_io_completion; |
| 2403 | } else { | 2403 | } else { |
| 2404 | request->complete_in_target = false; | 2404 | clear_bit(IREQ_COMPLETE_IN_TARGET, &request->flags); |
| 2405 | 2405 | ||
| 2406 | *complete_to_host_ptr = isci_perform_error_io_completion; | 2406 | *complete_to_host_ptr = isci_perform_error_io_completion; |
| 2407 | } | 2407 | } |
| @@ -2552,7 +2552,7 @@ static void isci_request_io_request_complete(struct isci_host *isci_host, | |||
| 2552 | * | 2552 | * |
| 2553 | * The target is still there (since the TMF was successful). | 2553 | * The target is still there (since the TMF was successful). |
| 2554 | */ | 2554 | */ |
| 2555 | request->complete_in_target = true; | 2555 | set_bit(IREQ_COMPLETE_IN_TARGET, &request->flags); |
| 2556 | response = SAS_TASK_COMPLETE; | 2556 | response = SAS_TASK_COMPLETE; |
| 2557 | 2557 | ||
| 2558 | /* See if the device has been/is being stopped. Note | 2558 | /* See if the device has been/is being stopped. Note |
| @@ -2579,7 +2579,7 @@ static void isci_request_io_request_complete(struct isci_host *isci_host, | |||
| 2579 | * Aborting also means an external thread is explicitly managing | 2579 | * Aborting also means an external thread is explicitly managing |
| 2580 | * this request, so that we do not complete it up the stack. | 2580 | * this request, so that we do not complete it up the stack. |
| 2581 | */ | 2581 | */ |
| 2582 | request->complete_in_target = true; | 2582 | set_bit(IREQ_COMPLETE_IN_TARGET, &request->flags); |
| 2583 | response = SAS_TASK_UNDELIVERED; | 2583 | response = SAS_TASK_UNDELIVERED; |
| 2584 | 2584 | ||
| 2585 | if (!idev) | 2585 | if (!idev) |
| @@ -2605,7 +2605,7 @@ static void isci_request_io_request_complete(struct isci_host *isci_host, | |||
| 2605 | * the device (reset, tear down, etc.), and the I/O needs | 2605 | * the device (reset, tear down, etc.), and the I/O needs |
| 2606 | * to be completed up the stack. | 2606 | * to be completed up the stack. |
| 2607 | */ | 2607 | */ |
| 2608 | request->complete_in_target = true; | 2608 | set_bit(IREQ_COMPLETE_IN_TARGET, &request->flags); |
| 2609 | response = SAS_TASK_UNDELIVERED; | 2609 | response = SAS_TASK_UNDELIVERED; |
| 2610 | 2610 | ||
| 2611 | /* See if the device has been/is being stopped. Note | 2611 | /* See if the device has been/is being stopped. Note |
| @@ -2675,7 +2675,7 @@ static void isci_request_io_request_complete(struct isci_host *isci_host, | |||
| 2675 | /* use the task status set in the task struct by the | 2675 | /* use the task status set in the task struct by the |
| 2676 | * isci_request_process_response_iu call. | 2676 | * isci_request_process_response_iu call. |
| 2677 | */ | 2677 | */ |
| 2678 | request->complete_in_target = true; | 2678 | set_bit(IREQ_COMPLETE_IN_TARGET, &request->flags); |
| 2679 | response = task->task_status.resp; | 2679 | response = task->task_status.resp; |
| 2680 | status = task->task_status.stat; | 2680 | status = task->task_status.stat; |
| 2681 | break; | 2681 | break; |
| @@ -2685,7 +2685,7 @@ static void isci_request_io_request_complete(struct isci_host *isci_host, | |||
| 2685 | 2685 | ||
| 2686 | response = SAS_TASK_COMPLETE; | 2686 | response = SAS_TASK_COMPLETE; |
| 2687 | status = SAM_STAT_GOOD; | 2687 | status = SAM_STAT_GOOD; |
| 2688 | request->complete_in_target = true; | 2688 | set_bit(IREQ_COMPLETE_IN_TARGET, &request->flags); |
| 2689 | 2689 | ||
| 2690 | if (task->task_proto == SAS_PROTOCOL_SMP) { | 2690 | if (task->task_proto == SAS_PROTOCOL_SMP) { |
| 2691 | void *rsp = &request->sci.smp.rsp; | 2691 | void *rsp = &request->sci.smp.rsp; |
| @@ -2737,7 +2737,7 @@ static void isci_request_io_request_complete(struct isci_host *isci_host, | |||
| 2737 | /* The request was terminated explicitly. No handling | 2737 | /* The request was terminated explicitly. No handling |
| 2738 | * is needed in the SCSI error handler path. | 2738 | * is needed in the SCSI error handler path. |
| 2739 | */ | 2739 | */ |
| 2740 | request->complete_in_target = true; | 2740 | set_bit(IREQ_COMPLETE_IN_TARGET, &request->flags); |
| 2741 | response = SAS_TASK_UNDELIVERED; | 2741 | response = SAS_TASK_UNDELIVERED; |
| 2742 | 2742 | ||
| 2743 | /* See if the device has been/is being stopped. Note | 2743 | /* See if the device has been/is being stopped. Note |
| @@ -2777,7 +2777,7 @@ static void isci_request_io_request_complete(struct isci_host *isci_host, | |||
| 2777 | status = SAM_STAT_TASK_ABORTED; | 2777 | status = SAM_STAT_TASK_ABORTED; |
| 2778 | 2778 | ||
| 2779 | complete_to_host = isci_perform_error_io_completion; | 2779 | complete_to_host = isci_perform_error_io_completion; |
| 2780 | request->complete_in_target = false; | 2780 | clear_bit(IREQ_COMPLETE_IN_TARGET, &request->flags); |
| 2781 | break; | 2781 | break; |
| 2782 | 2782 | ||
| 2783 | case SCI_FAILURE_RETRY_REQUIRED: | 2783 | case SCI_FAILURE_RETRY_REQUIRED: |
| @@ -2790,7 +2790,7 @@ static void isci_request_io_request_complete(struct isci_host *isci_host, | |||
| 2790 | status = SAS_ABORTED_TASK; | 2790 | status = SAS_ABORTED_TASK; |
| 2791 | 2791 | ||
| 2792 | complete_to_host = isci_perform_normal_io_completion; | 2792 | complete_to_host = isci_perform_normal_io_completion; |
| 2793 | request->complete_in_target = true; | 2793 | set_bit(IREQ_COMPLETE_IN_TARGET, &request->flags); |
| 2794 | break; | 2794 | break; |
| 2795 | 2795 | ||
| 2796 | 2796 | ||
| @@ -2813,10 +2813,10 @@ static void isci_request_io_request_complete(struct isci_host *isci_host, | |||
| 2813 | status = SAS_ABORTED_TASK; | 2813 | status = SAS_ABORTED_TASK; |
| 2814 | 2814 | ||
| 2815 | if (SAS_PROTOCOL_SMP == task->task_proto) { | 2815 | if (SAS_PROTOCOL_SMP == task->task_proto) { |
| 2816 | request->complete_in_target = true; | 2816 | set_bit(IREQ_COMPLETE_IN_TARGET, &request->flags); |
| 2817 | complete_to_host = isci_perform_normal_io_completion; | 2817 | complete_to_host = isci_perform_normal_io_completion; |
| 2818 | } else { | 2818 | } else { |
| 2819 | request->complete_in_target = false; | 2819 | clear_bit(IREQ_COMPLETE_IN_TARGET, &request->flags); |
| 2820 | complete_to_host = isci_perform_error_io_completion; | 2820 | complete_to_host = isci_perform_error_io_completion; |
| 2821 | } | 2821 | } |
| 2822 | break; | 2822 | break; |
| @@ -2870,7 +2870,7 @@ static void isci_request_io_request_complete(struct isci_host *isci_host, | |||
| 2870 | * terminated again, and to cause any calls into abort | 2870 | * terminated again, and to cause any calls into abort |
| 2871 | * task to recognize the already completed case. | 2871 | * task to recognize the already completed case. |
| 2872 | */ | 2872 | */ |
| 2873 | request->terminated = true; | 2873 | set_bit(IREQ_TERMINATED, &request->flags); |
| 2874 | } | 2874 | } |
| 2875 | 2875 | ||
| 2876 | static void scic_sds_request_started_state_enter(struct sci_base_state_machine *sm) | 2876 | static void scic_sds_request_started_state_enter(struct sci_base_state_machine *sm) |
| @@ -2919,7 +2919,7 @@ static void scic_sds_request_completed_state_enter(struct sci_base_state_machine | |||
| 2919 | struct isci_request *ireq = sci_req_to_ireq(sci_req); | 2919 | struct isci_request *ireq = sci_req_to_ireq(sci_req); |
| 2920 | 2920 | ||
| 2921 | /* Tell the SCI_USER that the IO request is complete */ | 2921 | /* Tell the SCI_USER that the IO request is complete */ |
| 2922 | if (sci_req->is_task_management_request == false) | 2922 | if (!test_bit(IREQ_TMF, &ireq->flags)) |
| 2923 | isci_request_io_request_complete(ihost, ireq, | 2923 | isci_request_io_request_complete(ihost, ireq, |
| 2924 | sci_req->sci_status); | 2924 | sci_req->sci_status); |
| 2925 | else | 2925 | else |
| @@ -3032,8 +3032,6 @@ scic_sds_general_request_construct(struct scic_sds_controller *scic, | |||
| 3032 | sci_req->scu_status = 0; | 3032 | sci_req->scu_status = 0; |
| 3033 | sci_req->post_context = 0xFFFFFFFF; | 3033 | sci_req->post_context = 0xFFFFFFFF; |
| 3034 | sci_req->tc = &scic->task_context_table[ISCI_TAG_TCI(io_tag)]; | 3034 | sci_req->tc = &scic->task_context_table[ISCI_TAG_TCI(io_tag)]; |
| 3035 | |||
| 3036 | sci_req->is_task_management_request = false; | ||
| 3037 | WARN_ONCE(io_tag == SCI_CONTROLLER_INVALID_IO_TAG, "straggling invalid tag usage\n"); | 3035 | WARN_ONCE(io_tag == SCI_CONTROLLER_INVALID_IO_TAG, "straggling invalid tag usage\n"); |
| 3038 | } | 3036 | } |
| 3039 | 3037 | ||
| @@ -3077,7 +3075,7 @@ enum sci_status scic_task_request_construct(struct scic_sds_controller *scic, | |||
| 3077 | 3075 | ||
| 3078 | if (dev->dev_type == SAS_END_DEV || | 3076 | if (dev->dev_type == SAS_END_DEV || |
| 3079 | dev->dev_type == SATA_DEV || (dev->tproto & SAS_PROTOCOL_STP)) { | 3077 | dev->dev_type == SATA_DEV || (dev->tproto & SAS_PROTOCOL_STP)) { |
| 3080 | sci_req->is_task_management_request = true; | 3078 | set_bit(IREQ_TMF, &sci_req_to_ireq(sci_req)->flags); |
| 3081 | memset(sci_req->tc, 0, sizeof(struct scu_task_context)); | 3079 | memset(sci_req->tc, 0, sizeof(struct scu_task_context)); |
| 3082 | } else | 3080 | } else |
| 3083 | status = SCI_FAILURE_UNSUPPORTED_PROTOCOL; | 3081 | status = SCI_FAILURE_UNSUPPORTED_PROTOCOL; |
| @@ -3379,12 +3377,8 @@ static struct isci_request *isci_request_alloc_core(struct isci_host *ihost, | |||
| 3379 | ireq->request_daddr = handle; | 3377 | ireq->request_daddr = handle; |
| 3380 | ireq->isci_host = ihost; | 3378 | ireq->isci_host = ihost; |
| 3381 | ireq->io_request_completion = NULL; | 3379 | ireq->io_request_completion = NULL; |
| 3382 | ireq->terminated = false; | 3380 | ireq->flags = 0; |
| 3383 | |||
| 3384 | ireq->num_sg_entries = 0; | 3381 | ireq->num_sg_entries = 0; |
| 3385 | |||
| 3386 | ireq->complete_in_target = false; | ||
| 3387 | |||
| 3388 | INIT_LIST_HEAD(&ireq->completed_node); | 3382 | INIT_LIST_HEAD(&ireq->completed_node); |
| 3389 | INIT_LIST_HEAD(&ireq->dev_node); | 3383 | INIT_LIST_HEAD(&ireq->dev_node); |
| 3390 | 3384 | ||
| @@ -3496,7 +3490,7 @@ int isci_request_execute(struct isci_host *ihost, struct isci_remote_device *ide | |||
| 3496 | * hardware, so clear the request handle | 3490 | * hardware, so clear the request handle |
| 3497 | * here so no terminations will be done. | 3491 | * here so no terminations will be done. |
| 3498 | */ | 3492 | */ |
| 3499 | ireq->terminated = true; | 3493 | set_bit(IREQ_TERMINATED, &ireq->flags); |
| 3500 | isci_request_change_state(ireq, completed); | 3494 | isci_request_change_state(ireq, completed); |
| 3501 | } | 3495 | } |
| 3502 | spin_unlock_irqrestore(&ihost->scic_lock, flags); | 3496 | spin_unlock_irqrestore(&ihost->scic_lock, flags); |
diff --git a/drivers/scsi/isci/request.h b/drivers/scsi/isci/request.h index 8c77c4cbe04a..f440e421ea0e 100644 --- a/drivers/scsi/isci/request.h +++ b/drivers/scsi/isci/request.h | |||
| @@ -210,12 +210,6 @@ struct scic_sds_request { | |||
| 210 | struct scu_sgl_element_pair sg_table[SCU_SGL_SIZE] __attribute__ ((aligned(32))); | 210 | struct scu_sgl_element_pair sg_table[SCU_SGL_SIZE] __attribute__ ((aligned(32))); |
| 211 | 211 | ||
| 212 | /* | 212 | /* |
| 213 | * This field indicates if this request is a task management request or | ||
| 214 | * normal IO request. | ||
| 215 | */ | ||
| 216 | bool is_task_management_request; | ||
| 217 | |||
| 218 | /* | ||
| 219 | * This field is a pointer to the stored rx frame data. It is used in | 213 | * This field is a pointer to the stored rx frame data. It is used in |
| 220 | * STP internal requests and SMP response frames. If this field is | 214 | * STP internal requests and SMP response frames. If this field is |
| 221 | * non-NULL the saved frame must be released on IO request completion. | 215 | * non-NULL the saved frame must be released on IO request completion. |
| @@ -260,8 +254,10 @@ struct isci_request { | |||
| 260 | enum isci_request_status status; | 254 | enum isci_request_status status; |
| 261 | enum task_type ttype; | 255 | enum task_type ttype; |
| 262 | unsigned short io_tag; | 256 | unsigned short io_tag; |
| 263 | bool complete_in_target; | 257 | #define IREQ_COMPLETE_IN_TARGET 0 |
| 264 | bool terminated; | 258 | #define IREQ_TERMINATED 1 |
| 259 | #define IREQ_TMF 2 | ||
| 260 | unsigned long flags; | ||
| 265 | 261 | ||
| 266 | union ttype_ptr_union { | 262 | union ttype_ptr_union { |
| 267 | struct sas_task *io_task_ptr; /* When ttype==io_task */ | 263 | struct sas_task *io_task_ptr; /* When ttype==io_task */ |
diff --git a/drivers/scsi/isci/task.c b/drivers/scsi/isci/task.c index 22f6fe171111..d1a46710f4a7 100644 --- a/drivers/scsi/isci/task.c +++ b/drivers/scsi/isci/task.c | |||
| @@ -558,15 +558,15 @@ static void isci_terminate_request_core( | |||
| 558 | : NULL; | 558 | : NULL; |
| 559 | 559 | ||
| 560 | /* Note that we are not going to control | 560 | /* Note that we are not going to control |
| 561 | * the target to abort the request. | 561 | * the target to abort the request. |
| 562 | */ | 562 | */ |
| 563 | isci_request->complete_in_target = true; | 563 | set_bit(IREQ_COMPLETE_IN_TARGET, &isci_request->flags); |
| 564 | 564 | ||
| 565 | /* Make sure the request wasn't just sitting around signalling | 565 | /* Make sure the request wasn't just sitting around signalling |
| 566 | * device condition (if the request handle is NULL, then the | 566 | * device condition (if the request handle is NULL, then the |
| 567 | * request completed but needed additional handling here). | 567 | * request completed but needed additional handling here). |
| 568 | */ | 568 | */ |
| 569 | if (!isci_request->terminated) { | 569 | if (!test_bit(IREQ_TERMINATED, &isci_request->flags)) { |
| 570 | was_terminated = true; | 570 | was_terminated = true; |
| 571 | needs_cleanup_handling = true; | 571 | needs_cleanup_handling = true; |
| 572 | status = scic_controller_terminate_request( | 572 | status = scic_controller_terminate_request( |
| @@ -609,7 +609,7 @@ static void isci_terminate_request_core( | |||
| 609 | flags); | 609 | flags); |
| 610 | 610 | ||
| 611 | /* Check for state changes. */ | 611 | /* Check for state changes. */ |
| 612 | if (!isci_request->terminated) { | 612 | if (!test_bit(IREQ_TERMINATED, &isci_request->flags)) { |
| 613 | 613 | ||
| 614 | /* The best we can do is to have the | 614 | /* The best we can do is to have the |
| 615 | * request die a silent death if it | 615 | * request die a silent death if it |
| @@ -1098,9 +1098,8 @@ int isci_task_abort_task(struct sas_task *task) | |||
| 1098 | ret = TMF_RESP_FUNC_COMPLETE; | 1098 | ret = TMF_RESP_FUNC_COMPLETE; |
| 1099 | goto out; | 1099 | goto out; |
| 1100 | } | 1100 | } |
| 1101 | if ((task->task_proto == SAS_PROTOCOL_SMP) | 1101 | if (task->task_proto == SAS_PROTOCOL_SMP || |
| 1102 | || old_request->complete_in_target | 1102 | test_bit(IREQ_COMPLETE_IN_TARGET, &old_request->flags)) { |
| 1103 | ) { | ||
| 1104 | 1103 | ||
| 1105 | spin_unlock_irqrestore(&isci_host->scic_lock, flags); | 1104 | spin_unlock_irqrestore(&isci_host->scic_lock, flags); |
| 1106 | 1105 | ||
| @@ -1108,7 +1107,7 @@ int isci_task_abort_task(struct sas_task *task) | |||
| 1108 | "%s: SMP request (%d)" | 1107 | "%s: SMP request (%d)" |
| 1109 | " or complete_in_target (%d), thus no TMF\n", | 1108 | " or complete_in_target (%d), thus no TMF\n", |
| 1110 | __func__, (task->task_proto == SAS_PROTOCOL_SMP), | 1109 | __func__, (task->task_proto == SAS_PROTOCOL_SMP), |
| 1111 | old_request->complete_in_target); | 1110 | test_bit(IREQ_COMPLETE_IN_TARGET, &old_request->flags)); |
| 1112 | 1111 | ||
| 1113 | /* Set the state on the task. */ | 1112 | /* Set the state on the task. */ |
| 1114 | isci_task_all_done(task); | 1113 | isci_task_all_done(task); |
| @@ -1136,7 +1135,7 @@ int isci_task_abort_task(struct sas_task *task) | |||
| 1136 | __func__); | 1135 | __func__); |
| 1137 | } | 1136 | } |
| 1138 | if (ret == TMF_RESP_FUNC_COMPLETE) { | 1137 | if (ret == TMF_RESP_FUNC_COMPLETE) { |
| 1139 | old_request->complete_in_target = true; | 1138 | set_bit(IREQ_COMPLETE_IN_TARGET, &old_request->flags); |
| 1140 | 1139 | ||
| 1141 | /* Clean up the request on our side, and wait for the aborted | 1140 | /* Clean up the request on our side, and wait for the aborted |
| 1142 | * I/O to complete. | 1141 | * I/O to complete. |
| @@ -1252,7 +1251,7 @@ isci_task_request_complete(struct isci_host *ihost, | |||
| 1252 | isci_request_change_state(ireq, completed); | 1251 | isci_request_change_state(ireq, completed); |
| 1253 | 1252 | ||
| 1254 | tmf->status = completion_status; | 1253 | tmf->status = completion_status; |
| 1255 | ireq->complete_in_target = true; | 1254 | set_bit(IREQ_COMPLETE_IN_TARGET, &ireq->flags); |
| 1256 | 1255 | ||
| 1257 | if (tmf->proto == SAS_PROTOCOL_SSP) { | 1256 | if (tmf->proto == SAS_PROTOCOL_SSP) { |
| 1258 | memcpy(&tmf->resp.resp_iu, | 1257 | memcpy(&tmf->resp.resp_iu, |
| @@ -1271,7 +1270,7 @@ isci_task_request_complete(struct isci_host *ihost, | |||
| 1271 | /* set the 'terminated' flag handle to make sure it cannot be terminated | 1270 | /* set the 'terminated' flag handle to make sure it cannot be terminated |
| 1272 | * or completed again. | 1271 | * or completed again. |
| 1273 | */ | 1272 | */ |
| 1274 | ireq->terminated = true;; | 1273 | set_bit(IREQ_TERMINATED, &ireq->flags); |
| 1275 | 1274 | ||
| 1276 | isci_request_change_state(ireq, unallocated); | 1275 | isci_request_change_state(ireq, unallocated); |
| 1277 | list_del_init(&ireq->dev_node); | 1276 | list_del_init(&ireq->dev_node); |
