Hello, Herbert. On 03/31/2010 03:17 PM, Herbert Xu wrote: > commit 8f6205cd572fece673da0255d74843680f67f879 > Author: Tejun Heo <tj@xxxxxxxxxx> > Date: Fri May 8 11:53:59 2009 +0900 > > ide: dequeue in-flight request > > The problem is that the function ide_dma_timeout_retry does not > requeue the current request, causing one request to be lost for > each DMA timeout. Hmmm.... > diff --git a/drivers/ide/ide-dma.c b/drivers/ide/ide-dma.c > index ee58c88..62a257f 100644 > --- a/drivers/ide/ide-dma.c > +++ b/drivers/ide/ide-dma.c > @@ -492,6 +492,7 @@ ide_startstop_t ide_dma_timeout_retry(ide_drive_t *drive, int error) > if (rq) { > hwif->rq = NULL; > rq->errors = 0; > + ide_requeue_request(drive, rq); > } > return ret; > } Hmmm... ide_dma_timeout_retry() is called from ide_timer_expiry() if !hwif->polling. The former returns ide_stopped if the current request processing should be stopped, in which case ide_timer_expiry() calls plug_device to 1 which makes it call ide_requeue_and_plug() at the end of the function. Does the above change make the request to be requeued twice? Thanks. -- tejun -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html