scsi: pm80xx: cleanup in pm8001_abort_task function.
Signed-off-by: Deepak Ukey <deepak.ukey@microsemi.com> Signed-off-by: Viswas G <Viswas.G@microsemi.com> Acked-by: Jack Wang <jinpu.wang@profitbricks.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
25c6edbde2
commit
1db49906d8
|
@ -1159,40 +1159,34 @@ int pm8001_query_task(struct sas_task *task)
|
||||||
int pm8001_abort_task(struct sas_task *task)
|
int pm8001_abort_task(struct sas_task *task)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
u32 tag = 0xdeadbeef;
|
u32 tag;
|
||||||
u32 device_id;
|
u32 device_id;
|
||||||
struct domain_device *dev ;
|
struct domain_device *dev ;
|
||||||
struct pm8001_hba_info *pm8001_ha = NULL;
|
struct pm8001_hba_info *pm8001_ha;
|
||||||
struct pm8001_ccb_info *ccb;
|
|
||||||
struct scsi_lun lun;
|
struct scsi_lun lun;
|
||||||
struct pm8001_device *pm8001_dev;
|
struct pm8001_device *pm8001_dev;
|
||||||
struct pm8001_tmf_task tmf_task;
|
struct pm8001_tmf_task tmf_task;
|
||||||
int rc = TMF_RESP_FUNC_FAILED;
|
int rc = TMF_RESP_FUNC_FAILED;
|
||||||
if (unlikely(!task || !task->lldd_task || !task->dev))
|
if (unlikely(!task || !task->lldd_task || !task->dev))
|
||||||
return rc;
|
return TMF_RESP_FUNC_FAILED;
|
||||||
|
dev = task->dev;
|
||||||
|
pm8001_dev = dev->lldd_dev;
|
||||||
|
pm8001_ha = pm8001_find_ha_by_dev(dev);
|
||||||
|
device_id = pm8001_dev->device_id;
|
||||||
|
rc = pm8001_find_tag(task, &tag);
|
||||||
|
if (rc == 0) {
|
||||||
|
pm8001_printk("no tag for task:%p\n", task);
|
||||||
|
return TMF_RESP_FUNC_FAILED;
|
||||||
|
}
|
||||||
spin_lock_irqsave(&task->task_state_lock, flags);
|
spin_lock_irqsave(&task->task_state_lock, flags);
|
||||||
if (task->task_state_flags & SAS_TASK_STATE_DONE) {
|
if (task->task_state_flags & SAS_TASK_STATE_DONE) {
|
||||||
spin_unlock_irqrestore(&task->task_state_lock, flags);
|
spin_unlock_irqrestore(&task->task_state_lock, flags);
|
||||||
rc = TMF_RESP_FUNC_COMPLETE;
|
return TMF_RESP_FUNC_COMPLETE;
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&task->task_state_lock, flags);
|
spin_unlock_irqrestore(&task->task_state_lock, flags);
|
||||||
if (task->task_proto & SAS_PROTOCOL_SSP) {
|
if (task->task_proto & SAS_PROTOCOL_SSP) {
|
||||||
struct scsi_cmnd *cmnd = task->uldd_task;
|
struct scsi_cmnd *cmnd = task->uldd_task;
|
||||||
dev = task->dev;
|
|
||||||
ccb = task->lldd_task;
|
|
||||||
pm8001_dev = dev->lldd_dev;
|
|
||||||
pm8001_ha = pm8001_find_ha_by_dev(dev);
|
|
||||||
int_to_scsilun(cmnd->device->lun, &lun);
|
int_to_scsilun(cmnd->device->lun, &lun);
|
||||||
rc = pm8001_find_tag(task, &tag);
|
|
||||||
if (rc == 0) {
|
|
||||||
printk(KERN_INFO "No such tag in %s\n", __func__);
|
|
||||||
rc = TMF_RESP_FUNC_FAILED;
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
device_id = pm8001_dev->device_id;
|
|
||||||
PM8001_EH_DBG(pm8001_ha,
|
|
||||||
pm8001_printk("abort io to deviceid= %d\n", device_id));
|
|
||||||
tmf_task.tmf = TMF_ABORT_TASK;
|
tmf_task.tmf = TMF_ABORT_TASK;
|
||||||
tmf_task.tag_of_task_to_be_managed = tag;
|
tmf_task.tag_of_task_to_be_managed = tag;
|
||||||
rc = pm8001_issue_ssp_tmf(dev, lun.scsi_lun, &tmf_task);
|
rc = pm8001_issue_ssp_tmf(dev, lun.scsi_lun, &tmf_task);
|
||||||
|
@ -1200,33 +1194,14 @@ int pm8001_abort_task(struct sas_task *task)
|
||||||
pm8001_dev->sas_device, 0, tag);
|
pm8001_dev->sas_device, 0, tag);
|
||||||
} else if (task->task_proto & SAS_PROTOCOL_SATA ||
|
} else if (task->task_proto & SAS_PROTOCOL_SATA ||
|
||||||
task->task_proto & SAS_PROTOCOL_STP) {
|
task->task_proto & SAS_PROTOCOL_STP) {
|
||||||
dev = task->dev;
|
|
||||||
pm8001_dev = dev->lldd_dev;
|
|
||||||
pm8001_ha = pm8001_find_ha_by_dev(dev);
|
|
||||||
rc = pm8001_find_tag(task, &tag);
|
|
||||||
if (rc == 0) {
|
|
||||||
printk(KERN_INFO "No such tag in %s\n", __func__);
|
|
||||||
rc = TMF_RESP_FUNC_FAILED;
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev,
|
rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev,
|
||||||
pm8001_dev->sas_device, 0, tag);
|
pm8001_dev->sas_device, 0, tag);
|
||||||
} else if (task->task_proto & SAS_PROTOCOL_SMP) {
|
} else if (task->task_proto & SAS_PROTOCOL_SMP) {
|
||||||
/* SMP */
|
/* SMP */
|
||||||
dev = task->dev;
|
|
||||||
pm8001_dev = dev->lldd_dev;
|
|
||||||
pm8001_ha = pm8001_find_ha_by_dev(dev);
|
|
||||||
rc = pm8001_find_tag(task, &tag);
|
|
||||||
if (rc == 0) {
|
|
||||||
printk(KERN_INFO "No such tag in %s\n", __func__);
|
|
||||||
rc = TMF_RESP_FUNC_FAILED;
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev,
|
rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev,
|
||||||
pm8001_dev->sas_device, 0, tag);
|
pm8001_dev->sas_device, 0, tag);
|
||||||
|
|
||||||
}
|
}
|
||||||
out:
|
|
||||||
if (rc != TMF_RESP_FUNC_COMPLETE)
|
if (rc != TMF_RESP_FUNC_COMPLETE)
|
||||||
pm8001_printk("rc= %d\n", rc);
|
pm8001_printk("rc= %d\n", rc);
|
||||||
return rc;
|
return rc;
|
||||||
|
|
Loading…
Reference in New Issue