ide: Requeue request after DMA timeout
authorHerbert Xu <herbert@gondor.apana.org.au>
Wed, 31 Mar 2010 20:11:59 +0000 (20:11 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 1 Apr 2010 08:31:13 +0000 (01:31 -0700)
commit6072f7491f5ef391a575e18a1165e72a3eef1601
tree8d15e02b391f89bc518d6981a9325244d464614b
parent9ce41aed0d392246eb788786253f242e829fd5e1
ide: Requeue request after DMA timeout

I noticed that my KVM virtual machines were experiencing IDE
issues resulting in processes stuck on waiting for buffers to
complete.

The root cause is of course race conditions in the ancient qemu
backend that I'm using.  However, the fact that the guest isn't
recovering is a bug.

I've tracked it down to the change made last year to dequeue
requests at the start rather than at the end in the IDE layer.

commit 8f6205cd572fece673da0255d74843680f67f879
Author: Tejun Heo <tj@kernel.org>
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.

This patch fixes this by requeueing the request.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/ide/ide-dma.c
drivers/ide/ide-io.c
include/linux/ide.h