lkml.org 
[lkml]   [2004]   [Feb]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH/RFT] libata "DMA timeout" fix

The desired effect of a DMA timeout should be to throw an I/O error, but
that doesn't appear to be happening.

Those seeing DMA timeout messages, please test this patch.

Kernel hacker note: James B recommended that I implement my own
scsi_done() function, which duplicates the real scsi_done() but omits
the scsi_delete_timer() call. This is probably the best long term fix,
but doing so involves exporting several currently-private bits of SCSI
mid-layer, which I would rather not do. Probably best to create a
__scsi_done() inside the SCSI mid-layer, and call that.

Jeff, the only user of ->eh_strategy_handler() in any kernel



===== 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;
}
\
 
 \ /
  Last update: 2005-03-22 14:01    [W:0.036 / U:0.444 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site