mirror of
https://github.com/torvalds/linux.git
synced 2024-11-01 01:31:44 +00:00
[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: Dan Williams <dan.j.williams@intel.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
3944f50995
commit
3a2cdf391b
@ -411,18 +411,12 @@ static void sas_ata_post_internal(struct ata_queued_cmd *qc)
|
||||
* ourselves.
|
||||
*/
|
||||
struct sas_task *task = qc->lldd_task;
|
||||
unsigned long flags;
|
||||
|
||||
qc->lldd_task = NULL;
|
||||
if (task) {
|
||||
/* Should this be a AT(API) device reset? */
|
||||
spin_lock_irqsave(&task->task_state_lock, flags);
|
||||
task->task_state_flags |= SAS_TASK_NEED_DEV_RESET;
|
||||
spin_unlock_irqrestore(&task->task_state_lock, flags);
|
||||
|
||||
task->uldd_task = NULL;
|
||||
sas_ata_internal_abort(task);
|
||||
}
|
||||
if (!task)
|
||||
return;
|
||||
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
|
||||
list_for_each_entry_safe(cmd, n, error_q, eh_entry) {
|
||||
if (cmd->device->sdev_target == my_cmd->device->sdev_target &&
|
||||
cmd->device->lun == my_cmd->device->lun)
|
||||
sas_eh_finish_cmd(cmd);
|
||||
sas_eh_defer_cmd(cmd);
|
||||
}
|
||||
}
|
||||
|
||||
@ -594,7 +594,7 @@ Again:
|
||||
"recovered\n",
|
||||
SAS_ADDR(task->dev),
|
||||
cmd->device->lun);
|
||||
sas_eh_finish_cmd(cmd);
|
||||
sas_eh_defer_cmd(cmd);
|
||||
sas_scsi_clear_queue_lu(work_q, cmd);
|
||||
goto Again;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user