|
@@ -395,11 +395,15 @@ int sas_ata_init_host_and_port(struct domain_device *found_dev,
|
|
void sas_ata_task_abort(struct sas_task *task)
|
|
void sas_ata_task_abort(struct sas_task *task)
|
|
{
|
|
{
|
|
struct ata_queued_cmd *qc = task->uldd_task;
|
|
struct ata_queued_cmd *qc = task->uldd_task;
|
|
|
|
+ struct request_queue *q = qc->scsicmd->device->request_queue;
|
|
struct completion *waiting;
|
|
struct completion *waiting;
|
|
|
|
+ unsigned long flags;
|
|
|
|
|
|
/* Bounce SCSI-initiated commands to the SCSI EH */
|
|
/* Bounce SCSI-initiated commands to the SCSI EH */
|
|
if (qc->scsicmd) {
|
|
if (qc->scsicmd) {
|
|
|
|
+ spin_lock_irqsave(q->queue_lock, flags);
|
|
blk_abort_request(qc->scsicmd->request);
|
|
blk_abort_request(qc->scsicmd->request);
|
|
|
|
+ spin_unlock_irqrestore(q->queue_lock, flags);
|
|
scsi_schedule_eh(qc->scsicmd->device->host);
|
|
scsi_schedule_eh(qc->scsicmd->device->host);
|
|
return;
|
|
return;
|
|
}
|
|
}
|