Tejun Heo
dd8717da6d
ide: clean up timed out request handling
...
8f6205cd57 introduced a bug where a
timed out DMA request is never requeued and lost.
6072f7491f fixed this by making
ide_dma_timeout_retry() requeue the request itself. While the fix is
correct, it makes DMA and non-DMA paths asymmetric regarding how the
in flight request is requeued.
As long as hwif->rq is set, the IDE driver is assuming ownership of
the request and the request should either be completed or requeued
when clearing hwif->rq. In the timeout path, the ide driver holds
onto the request as long as the recovery action (ie. reset) is in
progress and clears it after the state machine is stopped (ide_stopped
return), so the existing requeueing logic is correct. The bug
occurred because ide_dma_timeout_retry() explicitly clears hwif->rq
without requeueing it.
ide_dma_timeout_retry() is called only by ide_timer_expiry() and
returns ide_started only when ide_error() would return it - ie. after
reset state machine has started in which case the state machine will
eventually end up executing the ide_stopped path in ide_timer_expiry()
after reset protocol is complete. So, there is no need to clear
hwif->rq from ide_dma_timeout_retry(). ide_timer_expiry() will handle
it the same way as PIO timeout path.
Kill hwif->rq clearing and requeueing from ide_dma_timeout_retry() and
let ide_timer_expiry() deal with it. The end result should remain the
same.
grepping shows ide_dma_timeout_retry() is the only site which clears
hwif->rq without taking care of the request, so there shouldn't be
similar fallouts.
Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-10-26 10:17:30 -07:00
..
aec62xx.c
ide: change ->set_dma_mode method parameters
2010-01-19 01:45:29 -08:00
ali14xx.c
ide: change ->set_pio_mode method parameters
2010-01-19 01:44:41 -08:00
alim15x3.c
alim15x3: fix handling of UDMA enable bit
2010-01-19 01:52:31 -08:00
amd74xx.c
amd74xx: use ->pio_mode value to determine pair device speed
2010-01-19 01:52:32 -08:00
at91_ide.c
ide: change ->set_pio_mode method parameters
2010-01-19 01:44:41 -08:00
atiixp.c
ide: change ->set_dma_mode method parameters
2010-01-19 01:45:29 -08:00
au1xxx-ide.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide-next-2.6
2010-03-04 08:24:06 -08:00
buddha.c
cmd64x.c
cmd64x: fix handling of address setup timings
2010-01-19 01:52:32 -08:00
cmd640.c
cmd640: fix kernel oops in test_irq() method
2010-05-11 00:08:03 -07:00
cs5520.c
ide: change ->set_dma_mode method parameters
2010-01-19 01:45:29 -08:00
cs5530.c
ide: change ->set_dma_mode method parameters
2010-01-19 01:45:29 -08:00
cs5535.c
cs5535: use ->pio_mode value to determine pair device speed
2010-01-19 01:52:33 -08:00
cs5536.c
cs5536: use ->pio_mode value to determine pair device speed
2010-01-19 01:52:33 -08:00
cy82c693.c
ide: change ->set_dma_mode method parameters
2010-01-19 01:45:29 -08:00
delkin_cb.c
dtc2278.c
ide: change ->set_pio_mode method parameters
2010-01-19 01:44:41 -08:00
falconide.c
gayle.c
m68k: amiga - Amiga Gayle IDE platform device conversion
2010-05-26 19:51:09 +02:00
hpt366.c
hpt366: fix clock turnaround
2010-10-26 10:17:29 -07:00
ht6560b.c
Update broken web addresses in the kernel.
2010-10-18 11:03:14 +02:00
icside.c
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/ide-2.6
2010-03-02 23:57:59 -08:00
ide-4drives.c
ide-acpi.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
ide-atapi.c
block: fix some more cmd_type cleanup fallout
2010-08-07 18:22:29 +02:00
ide-cd.c
block: autoconvert trivial BKL users to private mutex
2010-10-05 15:01:10 +02:00
ide-cd.h
ide-cd_ioctl.c
block: unify flags for struct bio and struct request
2010-08-07 18:20:39 +02:00
ide-cd_verbose.c
ide-cs.c
pcmcia: remove obsolete and wrong comments
2010-09-29 17:20:25 +02:00
ide-devsets.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
ide-disk.c
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
2010-10-24 13:41:39 -07:00
ide-disk.h
ide-disk_ioctl.c
block: autoconvert trivial BKL users to private mutex
2010-10-05 15:01:10 +02:00
ide-disk_proc.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
ide-dma-sff.c
ide-dma.c
ide: clean up timed out request handling
2010-10-26 10:17:30 -07:00
ide-eh.c
block: remove wrappers for request type/flags
2010-08-07 18:17:56 +02:00
ide-floppy.c
block: unify flags for struct bio and struct request
2010-08-07 18:20:39 +02:00
ide-floppy.h
ide-floppy_ioctl.c
block: autoconvert trivial BKL users to private mutex
2010-10-05 15:01:10 +02:00
ide-floppy_proc.c
ide-gd.c
block: autoconvert trivial BKL users to private mutex
2010-10-05 15:01:10 +02:00
ide-gd.h
ide-generic.c
ide-h8300.c
ide-io-std.c
ide-io.c
ide: remove unnecessary blk_queue_flushing() test in do_ide_request()
2010-09-10 12:35:36 +02:00
ide-ioctls.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
ide-iops.c
ide: add SATA cable detection support
2010-01-19 01:41:57 -08:00
ide-legacy.c
ide-lib.c
ide-park.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
ide-pci-generic.c
pata_piccolo: Driver for old Toshiba chipsets
2009-12-03 14:35:31 -05:00
ide-pio-blacklist.c
ide-pm.c
block: remove wrappers for request type/flags
2010-08-07 18:17:56 +02:00
ide-pnp.c
ide-probe.c
ide: Fix ordering of procfs registry.
2010-09-13 21:34:25 -07:00
ide-proc.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
ide-scan-pci.c
ide-sysfs.c
ide-tape.c
Merge branch 'llseek' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/bkl
2010-10-22 10:52:56 -07:00
ide-taskfile.c
drivers/ide: Use memdup_user
2010-08-09 03:17:53 -07:00
ide-timings.c
ide: ide_timing_compute() fixup
2010-01-19 11:30:09 -08:00
ide-xfer-mode.c
ide: make ide_get_best_pio_mode() static
2010-01-19 01:52:36 -08:00
ide.c
ide: use module_param_named rather than module_param_call
2010-08-11 23:04:39 +09:30
ide_platform.c
IDE: pass IRQ flags to the IDE core
2010-04-15 14:20:53 -07:00
it821x.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
it8172.c
ide: change ->set_dma_mode method parameters
2010-01-19 01:45:29 -08:00
it8213.c
ide: change ->set_dma_mode method parameters
2010-01-19 01:45:29 -08:00
jmicron.c
ide: change ->set_dma_mode method parameters
2010-01-19 01:45:29 -08:00
Kconfig
ide: update Kconfig text to mark as deprecated
2009-10-29 03:09:26 -07:00
macide.c
Makefile
ns87415.c
opti621.c
ide: change ->set_pio_mode method parameters
2010-01-19 01:44:41 -08:00
palm_bk3710.c
palm_bk3710: use ->pio_mode value to determine pair device speed
2010-01-19 01:52:34 -08:00
pdc202xx_new.c
ide: change ->set_dma_mode method parameters
2010-01-19 01:45:29 -08:00
pdc202xx_old.c
pdc202xx_old: ignore "FIFO empty" bit in test_irq() method
2010-04-22 19:11:24 -07:00
piix.c
ide: change ->set_dma_mode method parameters
2010-01-19 01:45:29 -08:00
pmac.c
powerpc/macio: Fix probing of macio devices by using the right of match table
2010-06-02 17:50:38 +10:00
q40ide.c
qd65xx.c
ide: change ->set_pio_mode method parameters
2010-01-19 01:44:41 -08:00
qd65xx.h
rapide.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
rz1000.c
sc1200.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
scc_pata.c
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/ide-2.6
2010-03-02 23:57:59 -08:00
serverworks.c
ide: change ->set_dma_mode method parameters
2010-01-19 01:45:29 -08:00
setup-pci.c
sgiioc4.c
ide: change ->set_dma_mode method parameters
2010-01-19 01:45:29 -08:00
siimage.c
siimage: use ->pio_mode value to determine pair device speed
2010-01-19 01:52:35 -08:00
sis5513.c
ide: change ->set_dma_mode method parameters
2010-01-19 01:45:29 -08:00
sl82c105.c
ide: change ->set_dma_mode method parameters
2010-01-19 01:45:29 -08:00
slc90e66.c
ide: change ->set_dma_mode method parameters
2010-01-19 01:45:29 -08:00
tc86c001.c
ide: change ->set_dma_mode method parameters
2010-01-19 01:45:29 -08:00
triflex.c
ide: change ->set_dma_mode method parameters
2010-01-19 01:45:29 -08:00
trm290.c
tx4938ide.c
tx493xide: use min_t() macro instead of min()
2010-08-09 03:17:55 -07:00
tx4939ide.c
tx493xide: use min_t() macro instead of min()
2010-08-09 03:17:55 -07:00
umc8672.c
ide: change ->set_pio_mode method parameters
2010-01-19 01:44:41 -08:00
via82cxxx.c
via82cxxx: fix typo for VT6415 PCIE PATA IDE Host Controller support.
2010-08-09 03:17:51 -07:00