|
|
@@ -836,8 +836,10 @@ static void ipr_sata_eh_done(struct ipr_cmnd *ipr_cmd)
|
|
|
|
|
|
qc->err_mask |= AC_ERR_OTHER;
|
|
|
sata_port->ioasa.status |= ATA_BUSY;
|
|
|
- list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
|
|
|
ata_qc_complete(qc);
|
|
|
+ if (ipr_cmd->eh_comp)
|
|
|
+ complete(ipr_cmd->eh_comp);
|
|
|
+ list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -5947,8 +5949,10 @@ static void ipr_erp_done(struct ipr_cmnd *ipr_cmd)
|
|
|
res->in_erp = 0;
|
|
|
}
|
|
|
scsi_dma_unmap(ipr_cmd->scsi_cmd);
|
|
|
- list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
|
|
|
scsi_cmd->scsi_done(scsi_cmd);
|
|
|
+ if (ipr_cmd->eh_comp)
|
|
|
+ complete(ipr_cmd->eh_comp);
|
|
|
+ list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -6338,8 +6342,10 @@ static void ipr_erp_start(struct ipr_ioa_cfg *ioa_cfg,
|
|
|
}
|
|
|
|
|
|
scsi_dma_unmap(ipr_cmd->scsi_cmd);
|
|
|
- list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
|
|
|
scsi_cmd->scsi_done(scsi_cmd);
|
|
|
+ if (ipr_cmd->eh_comp)
|
|
|
+ complete(ipr_cmd->eh_comp);
|
|
|
+ list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -6365,8 +6371,10 @@ static void ipr_scsi_done(struct ipr_cmnd *ipr_cmd)
|
|
|
scsi_dma_unmap(scsi_cmd);
|
|
|
|
|
|
spin_lock_irqsave(ipr_cmd->hrrq->lock, lock_flags);
|
|
|
- list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
|
|
|
scsi_cmd->scsi_done(scsi_cmd);
|
|
|
+ if (ipr_cmd->eh_comp)
|
|
|
+ complete(ipr_cmd->eh_comp);
|
|
|
+ list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
|
|
|
spin_unlock_irqrestore(ipr_cmd->hrrq->lock, lock_flags);
|
|
|
} else {
|
|
|
spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
|