linux/drivers/ata
Tejun Heo 6013efd886 libata: retry failed FLUSH if device didn't fail it
If ATA device failed FLUSH, it means that the device failed to write
out some amount of data and the error needs to be reported to upper
layers. As retries can't recover the lost data, FLUSH failures need to
be reported immediately in general.

However, if FLUSH fails due to transmission errors, the FLUSH needs to
be retried; otherwise, filesystems may switch to RO mode and/or raid
array may drop a drive for a random transmission glitch.

This condition can be rather easily reproduced on certain ahci
controllers which go through a PHY event after powersave mode switch +
ext4 combination.  Powersave mode switch is often closely followed by
flush from the filesystem failing the FLUSH with ATA bus error which
makes the filesystem code believe that data is lost and drop to RO
mode.  This was reported in the following bugzilla bug.

  http://bugzilla.kernel.org/show_bug.cgi?id=14543

This patch makes libata EH retry FLUSH if it wasn't failed by the
device.

Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-by: Andrey Vihrov <andrey.vihrov@gmail.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
2009-12-03 02:46:35 -05:00
..
Kconfig libata: remove experimental tag on PATA drivers 2009-12-03 02:46:34 -05:00
Makefile libata: Add pata_atp867x driver for Artop/Acard ATP867X controllers 2009-09-17 16:47:06 -04:00
ahci.c ahci: disable SNotification capability for ich8 2009-12-03 02:46:34 -05:00
ata_generic.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
ata_piix.c ata_piix: parallel scanning on PATA needs an extra locking 2009-08-31 17:25:00 -10:00
libata-acpi.c libata-acpi: missing _SDD is not an error 2009-12-03 02:46:33 -05:00
libata-core.c drivers/ata/libata: Move dereference after NULL test 2009-11-03 14:26:12 -05:00
libata-eh.c libata: retry failed FLUSH if device didn't fail it 2009-12-03 02:46:35 -05:00
libata-pmp.c libata: add SATA PMP revision information for spec 1.2 2009-09-08 21:21:14 -04:00
libata-scsi.c ata: Don't require newlines for link_power_management_policy 2009-12-03 02:46:35 -05:00
libata-sff.c libata-sff: avoid byte swapping in ata_sff_data_xfer() 2009-06-10 07:50:16 -04:00
libata.h libata: make gtf_filter per-dev 2009-10-06 00:26:27 -04:00
pata_acpi.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_ali.c pata_ali: trivial fix of a very frequent spelling mistake 2009-10-06 00:22:10 -04:00
pata_amd.c pata_amd: do not filter out valid modes in nv_mode_filter 2009-09-17 16:46:41 -04:00
pata_artop.c pata_artop: Serializing support 2009-03-24 22:45:05 -04:00
pata_at32.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_at91.c pata_at91: fix resource release 2009-08-12 06:16:47 -04:00
pata_atiixp.c ahci / atiixp / pci quirks: rename AMD SB900 into Hudson-2 2009-10-16 06:21:20 -04:00
pata_atp867x.c pata_atp867x: add Power Management support 2009-10-06 20:58:23 -04:00
pata_bf54x.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_cmd64x.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_cmd640.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_cs5520.c dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
pata_cs5530.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_cs5535.c pata_cs5535: add pci id for AMD based CS5535 controllers 2009-09-11 02:31:31 -04:00
pata_cs5536.c pata_cs5536: use 32-bit BM DMA template instead of 16-bit. 2009-12-03 02:46:34 -05:00
pata_cypress.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_efar.c pata_efar: fix PIO2 underclocking 2009-06-05 14:40:52 -04:00
pata_hpt3x2n.c pata_hpt{37x,3x2n}: add debounce delay to cable detection methods 2009-12-03 02:46:35 -05:00
pata_hpt3x3.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_hpt37x.c pata_hpt{37x,3x2n}: add debounce delay to cable detection methods 2009-12-03 02:46:35 -05:00
pata_hpt366.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_icside.c Merge branch 'origin' into devel 2009-03-28 20:29:51 +00:00
pata_isapnp.c [libata] Improve timeout handling 2009-03-24 22:52:39 -04:00
pata_it821x.c pata-it821x: use PCI_DEVICE_ID_RDC_D1010 define 2009-12-03 02:46:35 -05:00
pata_it8213.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_ixp4xx_cf.c dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
pata_jmicron.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_legacy.c pata_legacy: wait for async probing 2009-06-05 14:40:46 -04:00
pata_marvell.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_mpc52xx.c powerpc/5xxx: Add common mpc5xxx_get_bus_frequency() function 2009-06-17 00:30:22 -06:00
pata_mpiix.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_netcell.c pata_netcell: Fix typo 2009-06-08 09:12:28 -07:00
pata_ninja32.c ata: Report 16/32bit PIO as best we can 2009-04-16 15:28:23 -04:00
pata_ns87410.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_ns87415.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_octeon_cf.c drivers/ata: use resource_size 2009-09-11 02:25:58 -04:00
pata_of_platform.c powerpc: Fix no interrupt handling in pata_of_platform 2008-10-10 15:55:17 +11:00
pata_oldpiix.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_opti.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_optidma.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_palmld.c [ARM] 5522/1: PalmLD: IDE support 2009-05-31 14:50:40 +01:00
pata_pcmcia.c pata_pcmcia: add CNF-CDROM-ID 2009-07-28 21:05:18 -04:00
pata_pdc202xx_old.c pata_pdc202xx_old: fix UDMA33 handling 2009-05-11 14:30:07 -04:00
pata_pdc2027x.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_platform.c drivers/ata: use resource_size 2009-09-11 02:25:58 -04:00
pata_qdi.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_radisys.c pata_radisys: fix mwdma_mask to exclude mwdma0 2009-03-24 22:13:32 -04:00
pata_rb532_cf.c drivers/ata: use resource_size 2009-09-11 02:25:58 -04:00
pata_rdc.c [libata] Add pata_rdc driver for RDC ATA devices 2009-09-01 19:47:20 -04:00
pata_rz1000.c pata_rz1000: use printk_once 2009-09-11 02:33:59 -04:00
pata_sc1200.c pata_sc1200: Fix crash on boot 2009-10-16 06:22:40 -04:00
pata_scc.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_sch.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_serverworks.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_sil680.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_sis.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_sl82c105.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_triflex.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_via.c pata_via: fix double put on isa bridge 2009-12-03 02:46:34 -05:00
pata_winbond.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pdc_adma.c dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
sata_fsl.c sata_fsl: Add asynchronous notification support 2009-12-03 02:46:35 -05:00
sata_inic162x.c drivers/ata: Remove unnecessary semicolons 2009-09-01 19:47:20 -04:00
sata_mv.c sata_mv: Clean up hard coded array size calculation. 2009-12-03 02:46:34 -05:00
sata_nv.c sata_nv: make sure link is brough up online when skipping hardreset 2009-10-16 06:21:32 -04:00
sata_promise.c sata_promise: update reset code 2009-09-17 16:46:34 -04:00
sata_promise.h libata annotations and fixes 2008-01-23 05:24:15 -05:00
sata_qstor.c dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
sata_sil.c [libata] sata_sil: disable DMA engine in sil_freeze() 2009-09-01 19:47:19 -04:00
sata_sil24.c sata_sil24: MSI support, disabled by default 2009-12-03 02:46:34 -05:00
sata_sis.c sata_sis: convert to slave_link 2009-09-08 21:17:36 -04:00
sata_svw.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
sata_sx4.c sata_sx4: speed up ECC initialization 2009-06-10 07:50:17 -04:00
sata_uli.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
sata_via.c sata_via: Remove redundant device ID for VIA VT8261 2009-11-03 14:27:06 -05:00
sata_vsc.c dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
sis.h libata: PATA-mode fixes for sis_sata 2007-07-02 10:17:42 -04:00