diff options
author | Dan Williams <dan.j.williams@intel.com> | 2011-05-05 17:47:44 -0700 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2011-07-03 04:04:46 -0700 |
commit | 5b3f2bd877382eaf4b5a7d90fdec72ef14b9ec97 (patch) | |
tree | b0594e7c86943cf863ba106b6848c9b3a2559eab /drivers/scsi | |
parent | 8694e79287ad92e351feceededeb6804babb6d9a (diff) | |
download | linux-5b3f2bd877382eaf4b5a7d90fdec72ef14b9ec97.tar.bz2 |
isci: fix ata locking
Upstream commit a29b5dad "libata: fix locking for sas paths" switched
libsas ata locking to the ata_host lock. We need to do the same when
returning ata tasks from the execute path.
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/isci/task.h | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/drivers/scsi/isci/task.h b/drivers/scsi/isci/task.h index 77cc54dbe81f..aa2458658d1e 100644 --- a/drivers/scsi/isci/task.h +++ b/drivers/scsi/isci/task.h @@ -344,26 +344,26 @@ isci_task_set_completion_status( * @status: This parameter is the status code for the completed task. * */ -static inline void isci_execpath_callback( - struct isci_host *ihost, - struct sas_task *task, - void (*func)(struct sas_task *)) +static inline void isci_execpath_callback(struct isci_host *ihost, + struct sas_task *task, + void (*func)(struct sas_task *)) { - unsigned long flags; + struct domain_device *dev = task->dev; + + if (dev_is_sata(dev) && task->uldd_task) { + unsigned long flags; - if (dev_is_sata(task->dev) && task->uldd_task) { /* Since we are still in the submit path, and since - * libsas takes the host lock on behalf of SATA - * devices before I/O starts (in the non-discovery case), - * we need to unlock before we can call the callback function. - */ + * libsas takes the host lock on behalf of SATA + * devices before I/O starts (in the non-discovery case), + * we need to unlock before we can call the callback function. + */ raw_local_irq_save(flags); - spin_unlock(ihost->shost->host_lock); + spin_unlock(dev->sata_dev.ap->lock); func(task); - spin_lock(ihost->shost->host_lock); + spin_lock(dev->sata_dev.ap->lock); raw_local_irq_restore(flags); } else func(task); } - #endif /* !defined(_SCI_TASK_H_) */ |