[SCSI] libsas: remove ata_port.lock management duties from lldds
Each libsas driver (mvsas, pm8001, and isci) has invented a different method for managing the ap->lock. The lock is held by the ata ->queuecommand() path. mvsas drops it prior to acquiring any internal locks which allows it to hold its internal lock across calls to task->task_done(). This capability is important as it is the only way the driver can flush task->task_done() instances to guarantee that it no longer has any in-flight references to a domain_device at ->lldd_dev_gone() time. Signed-off-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:

committed by
James Bottomley

parent
b1124cd3ec
commit
312d3e5611
@@ -96,8 +96,7 @@ static void isci_task_refuse(struct isci_host *ihost, struct sas_task *task,
|
||||
__func__, task, response, status);
|
||||
|
||||
task->lldd_task = NULL;
|
||||
|
||||
isci_execpath_callback(ihost, task, task->task_done);
|
||||
task->task_done(task);
|
||||
break;
|
||||
|
||||
case isci_perform_aborted_io_completion:
|
||||
@@ -117,8 +116,7 @@ static void isci_task_refuse(struct isci_host *ihost, struct sas_task *task,
|
||||
"%s: Error - task = %p, response=%d, "
|
||||
"status=%d\n",
|
||||
__func__, task, response, status);
|
||||
|
||||
isci_execpath_callback(ihost, task, sas_task_abort);
|
||||
sas_task_abort(task);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
Reference in New Issue
Block a user