|
@@ -5415,11 +5415,19 @@ fsm_start:
|
|
|
* let the EH abort the command or reset the device.
|
|
|
*/
|
|
|
if (unlikely(status & (ATA_ERR | ATA_DF))) {
|
|
|
- ata_port_printk(ap, KERN_WARNING, "DRQ=1 with device "
|
|
|
- "error, dev_stat 0x%X\n", status);
|
|
|
- qc->err_mask |= AC_ERR_HSM;
|
|
|
- ap->hsm_task_state = HSM_ST_ERR;
|
|
|
- goto fsm_start;
|
|
|
+ /* Some ATAPI tape drives forget to clear the ERR bit
|
|
|
+ * when doing the next command (mostly request sense).
|
|
|
+ * We ignore ERR here to workaround and proceed sending
|
|
|
+ * the CDB.
|
|
|
+ */
|
|
|
+ if (!(qc->dev->horkage & ATA_HORKAGE_STUCK_ERR)) {
|
|
|
+ ata_port_printk(ap, KERN_WARNING,
|
|
|
+ "DRQ=1 with device error, "
|
|
|
+ "dev_stat 0x%X\n", status);
|
|
|
+ qc->err_mask |= AC_ERR_HSM;
|
|
|
+ ap->hsm_task_state = HSM_ST_ERR;
|
|
|
+ goto fsm_start;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/* Send the CDB (atapi) or the first data block (ata pio out).
|