Commit 3a2cdf39 authored by Dan Williams's avatar Dan Williams Committed by James Bottomley

[SCSI] libsas: defer SAS_TASK_NEED_DEV_RESET commands to libata

lldds use the SAS_TASK_NEED_DEV_RESET interface to request that eh
perform a reset.  In the sata device case defer the commands that
triggered the reset to libata-eh context so it can perform its pre and
post reset management.

In the sas_ata_post_internal() case the reset request is falling on deaf
ears as the sas_task is immediately destroyed without any reset action.
Since it is currently a nop, and likely superfluous given the conversion
to new-style libata-eh, just drop the request.
Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent 3944f509
...@@ -411,18 +411,12 @@ static void sas_ata_post_internal(struct ata_queued_cmd *qc) ...@@ -411,18 +411,12 @@ static void sas_ata_post_internal(struct ata_queued_cmd *qc)
* ourselves. * ourselves.
*/ */
struct sas_task *task = qc->lldd_task; struct sas_task *task = qc->lldd_task;
unsigned long flags;
qc->lldd_task = NULL; qc->lldd_task = NULL;
if (task) { if (!task)
/* Should this be a AT(API) device reset? */ return;
spin_lock_irqsave(&task->task_state_lock, flags); task->uldd_task = NULL;
task->task_state_flags |= SAS_TASK_NEED_DEV_RESET; sas_ata_internal_abort(task);
spin_unlock_irqrestore(&task->task_state_lock, flags);
task->uldd_task = NULL;
sas_ata_internal_abort(task);
}
} }
} }
......
...@@ -288,7 +288,7 @@ static void sas_scsi_clear_queue_lu(struct list_head *error_q, struct scsi_cmnd ...@@ -288,7 +288,7 @@ static void sas_scsi_clear_queue_lu(struct list_head *error_q, struct scsi_cmnd
list_for_each_entry_safe(cmd, n, error_q, eh_entry) { list_for_each_entry_safe(cmd, n, error_q, eh_entry) {
if (cmd->device->sdev_target == my_cmd->device->sdev_target && if (cmd->device->sdev_target == my_cmd->device->sdev_target &&
cmd->device->lun == my_cmd->device->lun) cmd->device->lun == my_cmd->device->lun)
sas_eh_finish_cmd(cmd); sas_eh_defer_cmd(cmd);
} }
} }
...@@ -594,7 +594,7 @@ static int sas_eh_handle_sas_errors(struct Scsi_Host *shost, ...@@ -594,7 +594,7 @@ static int sas_eh_handle_sas_errors(struct Scsi_Host *shost,
"recovered\n", "recovered\n",
SAS_ADDR(task->dev), SAS_ADDR(task->dev),
cmd->device->lun); cmd->device->lun);
sas_eh_finish_cmd(cmd); sas_eh_defer_cmd(cmd);
sas_scsi_clear_queue_lu(work_q, cmd); sas_scsi_clear_queue_lu(work_q, cmd);
goto Again; goto Again;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment