Skip to contentSkip to conversation

mvsas: retry aborting task.

PATCH Superseded Ke Wei 1 participant 1 message Mar 21, 2008 SCSI

lore
Share & tools
lore

Ke Wei

author
#0 lore raw

PATCH 5/8 mvsas: retry aborting task.

---
drivers/scsi/mvsas.c | 33 +++++++++++++++++++++++++--------

1 files changed, 25 insertions(+), 8 deletions(-)
drivers/scsi/mvsas.c +0 -0
index ebfe164..f4f7b0a 100644
@@ -2159,42 +2159,59 @@ out_done:
 

static int mvs_task_abort(struct sas_task *task)
{
- int rc = 1;

+    int rc;
    unsigned long flags;
    struct mvs_info *mvi = task->dev->port->ha->lldd_ha;
    struct pci_dev *pdev = mvi->pdev;

+ int tag;

    spin_lock_irqsave(&task->task_state_lock, flags);
    if (task->task_state_flags & SAS_TASK_STATE_DONE) {
        rc = TMF_RESP_FUNC_COMPLETE;
+        spin_unlock_irqrestore(&task->task_state_lock, flags);
        goto out_done;
    }
    spin_unlock_irqrestore(&task->task_state_lock, flags);

- /*FIXME*/
- rc = TMF_RESP_FUNC_COMPLETE;
-

    switch (task->task_proto) {
    case SAS_PROTOCOL_SMP:
-        dev_printk(KERN_DEBUG, &pdev->dev, "SMP Abort! ");
+        dev_printk(KERN_DEBUG, &pdev->dev, "SMP Abort! \n");
        break;
    case SAS_PROTOCOL_SSP:
-        dev_printk(KERN_DEBUG, &pdev->dev, "SSP Abort! ");
+        dev_printk(KERN_DEBUG, &pdev->dev, "SSP Abort! \n");
        break;
    case SAS_PROTOCOL_SATA:
    case SAS_PROTOCOL_STP:
    case SAS_PROTOCOL_SATA | SAS_PROTOCOL_STP:{

- dev_printk(KERN_DEBUG, &pdev->dev, "STP Abort! "
- "Dump D2H FIS: \n");
+ dev_printk(KERN_DEBUG, &pdev->dev, "STP Abort! \n");
+#if _MV_DUMP

+        dev_printk(KERN_DEBUG, &pdev->dev, "Dump D2H FIS: \n");
        mvs_hexdump(sizeof(struct host_to_dev_fis),
                (void *)&task->ata_task.fis, 0);
        dev_printk(KERN_DEBUG, &pdev->dev, "Dump ATAPI Cmd : \n");
        mvs_hexdump(16, task->ata_task.atapi_packet, 0);

+#endif
+ spin_lock_irqsave(&task->task_state_lock, flags);
+ if (task->task_state_flags & SAS_TASK_NEED_DEV_RESET) {
+ /* TODO */
+ ;
+ }

+        spin_unlock_irqrestore(&task->task_state_lock, flags);
        break;
    }
    default:
        break;
    }
+
+    if (mvs_find_tag(mvi, task, &tag)) {
+        spin_lock_irqsave(&mvi->lock, flags);
+        mvs_slot_task_free(mvi, task, &mvi->slot_info[tag], tag);
+        spin_unlock_irqrestore(&mvi->lock, flags);

+ }
+ if (!mvs_task_exec(task, 1, GFP_ATOMIC))
+ rc = TMF_RESP_FUNC_COMPLETE;
+ else
+ rc = TMF_RESP_FUNC_FAILED;
out_done:

    return rc;
}
Signature · 1 line
1.5.4