diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 79e3a8e..24179b8 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -4642,6 +4642,13 @@ void ata_qc_complete(struct ata_queued_cmd *qc) { struct ata_port *ap = qc->ap; + if (qc->tf.command == ATA_CMD_FPDMA_WRITE || + qc->tf.command == ATA_CMD_WRITE || + qc->tf.command == ATA_CMD_WRITE_EXT) { + ata_dev_printk(qc->dev, KERN_INFO, "XXX skipping completion\n"); + return; + } + /* XXX: New EH and old EH use different mechanisms to * synchronize EH with regular execution path. * diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index c1db2f2..617c188 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c @@ -531,6 +531,19 @@ void ata_scsi_error(struct Scsi_Host *host) spin_lock_irqsave(ap->lock, flags); + { + struct ata_queued_cmd *qc; + + ata_port_printk(ap, KERN_INFO, "XXX eh_cmd_q:"); + list_for_each_entry(scmd, &host->eh_cmd_q, eh_entry) + printk(" %p", scmd); + printk("\n"); + + qc = __ata_qc_from_tag(ap, 0); + ata_port_printk(ap, KERN_INFO, "XXX qc%d: cmd=%x flags=%08lx scmd=%p\n", + qc->tag, qc->tf.command, qc->flags, qc->scsicmd); + } + list_for_each_entry_safe(scmd, tmp, &host->eh_cmd_q, eh_entry) { struct ata_queued_cmd *qc;