From e8b2bd7c57e0554f6720889d7b701c55e7d0e519 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 21 Jun 2011 16:23:03 -0700 Subject: [PATCH] --- yaml --- r: 254561 b: refs/heads/master c: 086a0dabc5bf154e13604a6d71e2d051207f9718 h: refs/heads/master i: 254559: d0c8659787a839cb19ba29ab6d9824a3fa534ddf v: v3 --- [refs] | 2 +- trunk/drivers/scsi/isci/task.c | 20 ++++++++------------ 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/[refs] b/[refs] index 387f563e46f1..1e5484a980d3 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e9bf709564e90abea25ca7aeae8c3de5cc6468d7 +refs/heads/master: 086a0dabc5bf154e13604a6d71e2d051207f9718 diff --git a/trunk/drivers/scsi/isci/task.c b/trunk/drivers/scsi/isci/task.c index c313bc16c218..0835a2c2dc71 100644 --- a/trunk/drivers/scsi/isci/task.c +++ b/trunk/drivers/scsi/isci/task.c @@ -339,7 +339,8 @@ int isci_task_execute_tmf(struct isci_host *ihost, status, ireq); spin_unlock_irqrestore(&ihost->scic_lock, flags); - goto cleanup_request; + isci_request_free(ihost, ireq); + return ret; } if (tmf->cb_state_func != NULL) @@ -354,7 +355,7 @@ int isci_task_execute_tmf(struct isci_host *ihost, /* Wait for the TMF to complete, or a timeout. */ timeleft = wait_for_completion_timeout(&completion, - jiffies + msecs_to_jiffies(timeout_ms)); + msecs_to_jiffies(timeout_ms)); if (timeleft == 0) { spin_lock_irqsave(&ihost->scic_lock, flags); @@ -362,11 +363,13 @@ int isci_task_execute_tmf(struct isci_host *ihost, if (tmf->cb_state_func != NULL) tmf->cb_state_func(isci_tmf_timed_out, tmf, tmf->cb_data); - status = scic_controller_terminate_request(&ihost->sci, - &isci_device->sci, - &ireq->sci); + scic_controller_terminate_request(&ihost->sci, + &isci_device->sci, + &ireq->sci); spin_unlock_irqrestore(&ihost->scic_lock, flags); + + wait_for_completion(tmf->complete); } isci_print_tmf(tmf); @@ -387,13 +390,6 @@ int isci_task_execute_tmf(struct isci_host *ihost, __func__, ireq); - if (ireq->io_request_completion != NULL) { - /* A thread is waiting for this TMF to finish. */ - complete(ireq->io_request_completion); - } - - cleanup_request: - isci_request_free(ihost, ireq); return ret; }