|
@@ -5111,15 +5111,18 @@ void ata_qc_issue(struct ata_queued_cmd *qc)
|
|
|
qc->flags |= ATA_QCFLAG_ACTIVE;
|
|
|
ap->qc_active |= 1 << qc->tag;
|
|
|
|
|
|
- /* We guarantee to LLDs that they will have at least one
|
|
|
+ /*
|
|
|
+ * We guarantee to LLDs that they will have at least one
|
|
|
* non-zero sg if the command is a data command.
|
|
|
*/
|
|
|
- BUG_ON(ata_is_data(prot) && (!qc->sg || !qc->n_elem || !qc->nbytes));
|
|
|
+ if (WARN_ON_ONCE(ata_is_data(prot) &&
|
|
|
+ (!qc->sg || !qc->n_elem || !qc->nbytes)))
|
|
|
+ goto sys_err;
|
|
|
|
|
|
if (ata_is_dma(prot) || (ata_is_pio(prot) &&
|
|
|
(ap->flags & ATA_FLAG_PIO_DMA)))
|
|
|
if (ata_sg_setup(qc))
|
|
|
- goto sg_err;
|
|
|
+ goto sys_err;
|
|
|
|
|
|
/* if device is sleeping, schedule reset and abort the link */
|
|
|
if (unlikely(qc->dev->flags & ATA_DFLAG_SLEEPING)) {
|
|
@@ -5136,7 +5139,7 @@ void ata_qc_issue(struct ata_queued_cmd *qc)
|
|
|
goto err;
|
|
|
return;
|
|
|
|
|
|
-sg_err:
|
|
|
+sys_err:
|
|
|
qc->err_mask |= AC_ERR_SYSTEM;
|
|
|
err:
|
|
|
ata_qc_complete(qc);
|