Messages in this thread | | | Date | Sat, 28 Feb 2004 16:23:35 -0500 | From | Jeff Garzik <> | Subject | Re: [PATCH/RFT] libata "DMA timeout" fix |
| |
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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |