Re: [PATCH/RFT] libata "DMA timeout" fix

From: Jeff Garzik
Date: Sat Feb 28 2004 - 16:26:12 EST


James Bottomley wrote:
On Sat, 2004-02-28 at 13:10, Jeff Garzik wrote:

===== drivers/scsi/libata-core.c 1.19 vs edited =====
--- 1.19/drivers/scsi/libata-core.c Wed Feb 25 22:41:13 2004
+++ edited/drivers/scsi/libata-core.c Sat Feb 28 14:03:18 2004
@@ -2130,6 +2130,14 @@
cmd->result = SAM_STAT_CHECK_CONDITION;
else
ata_to_sense_error(qc);
+
+ /* hack alert! we need this to get past the
+ * first check in scsi_done(). libata is the
+ * -only- user of ->eh_strategy_handler() in
+ * any kernel tree, which exposes some incorrect
+ * assumptions in the SCSI layer.
+ */
+ scsi_add_timer(cmd, 2000 * HZ, NULL);
} else {
cmd->result = SAM_STAT_GOOD;
}


You can't do this. Supposing there command's delayed, the timer fires
and then the command returns with a sense error? The done will go
through automatically completing the command, but your strategy handler
will still think it has a failed command to handle.

hmmm, yeah that will be a problem iff we are not already in the strategy handler.


The correct fix is this, I think (uncompiled, but you get the idea):

Yeah, that's much better. That function is not exported though ;-)

Jeff



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/