linux/drivers/ata
Tejun Heo 6fc49adb94 [PATCH] libata: use FLUSH_EXT only when driver is larger than LBA28 limit
Many drives support LBA48 even when its capacity is smaller than
1<<28, as LBA48 is required for many functionalities.  FLUSH_EXT is
mandatory for drives w/ LBA48 support.

Interestingly, at least one of such drives (ST960812A) has problems
dealing with FLUSH_EXT.  It eventually completes the command but takes
around 7 seconds to finish in many cases thus drastically slowing down
IO transactions.  This seems to be a firmware bug which sneaked into
production probably because no other ATA driver including linux IDE
issues FLUSH_EXT to drives which report support for LBA48 & FLUSH_EXT
but is smaller than 1<<28 blocks.

This patch adds ATA_DFLAG_FLUSH_EXT which is set iff the drive
supports LBA48 & FLUSH_EXT and is larger than LBA28 limit.  Both cache
flush paths are updated to issue FLUSH_EXT only when the flag is set.
Note that the changed behavior is more inline with the rest of libata.
libata prefers shorter commands whenever possible.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Cc: Danny Kukawka <dkukawka@novell.com>
Cc: Stefan Seyfried <seife@novell.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-12-01 22:45:54 -05:00
..
Kconfig [libata] ARM: add ixp4xx PATA driver 2006-12-01 22:42:51 -05:00
Makefile [libata] ARM: add ixp4xx PATA driver 2006-12-01 22:42:51 -05:00
ahci.c [PATCH] ahci: honor PORTS_IMPL on ICH8s 2006-12-01 22:44:53 -05:00
ata_generic.c [PATCH] pci_module_init-convertion-in-ata_genericc fix 2006-12-01 22:40:25 -05:00
ata_piix.c [PATCH] libata: add 40pin "short" cable support, honour drive side speed detection 2006-12-01 22:40:25 -05:00
libata-core.c [PATCH] libata: use FLUSH_EXT only when driver is larger than LBA28 limit 2006-12-01 22:45:54 -05:00
libata-eh.c [PATCH] libata: implement ATA_EHI_SETMODE and ATA_EHI_POST_SETMODE 2006-12-01 22:41:31 -05:00
libata-scsi.c [PATCH] libata: use FLUSH_EXT only when driver is larger than LBA28 limit 2006-12-01 22:45:54 -05:00
libata-sff.c [PATCH] libata: move ata_irq_on() into libata-sff.c 2006-12-01 22:40:28 -05:00
libata.h [PATCH] libata: implement ATA_EHI_PRINTINFO 2006-12-01 22:41:31 -05:00
pata_ali.c [PATCH] libata: add 40pin "short" cable support, honour drive side speed detection 2006-12-01 22:40:25 -05:00
pata_amd.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_artop.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_atiixp.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_cmd64x.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_cs5520.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_cs5530.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_cs5535.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_cypress.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_efar.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_hpt3x2n.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_hpt3x3.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_hpt37x.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_hpt366.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_isapnp.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_it821x.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_ixp4xx_cf.c [libata] ARM: add ixp4xx PATA driver 2006-12-01 22:42:51 -05:00
pata_jmicron.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_legacy.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_marvell.c [libata] pata_marvell: minor and trivial cleanups 2006-12-01 22:40:27 -05:00
pata_mpiix.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_netcell.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_ns87410.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_oldpiix.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_opti.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_optidma.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_pcmcia.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_pdc202xx_old.c [PATCH] pdc202xx_old: Fix name clashes with PA-RISC 2006-12-01 22:41:31 -05:00
pata_pdc2027x.c [PATCH] pci_module_init() conversion for pata_pdc2027x 2006-12-01 22:40:25 -05:00
pata_platform.c [PATCH] ata: Generic platform_device libata driver 2006-12-01 22:40:28 -05:00
pata_qdi.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_radisys.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_rz1000.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_sc1200.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_serverworks.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_sil680.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_sis.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_sl82c105.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_triflex.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_via.c [PATCH] libata: add missing sht->slave_destroy 2006-11-29 14:57:58 +09:00
pata_winbond.c [PATCH] libata: Winbond support 2006-12-01 22:40:24 -05:00
pdc_adma.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
sata_mv.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
sata_nv.c [PATCH] sata_nv: SRST sometimes fails after hotplug, use HRST_TO_RESUME 2006-12-01 22:40:29 -05:00
sata_promise.c Merge branch 'master' into upstream-fixes 2006-10-11 04:59:46 -04:00
sata_promise.h Move libata to drivers/ata. 2006-08-10 07:31:37 -04:00
sata_qstor.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
sata_sil.c [PATCH] libata: implement ATA_EHI_PRINTINFO 2006-12-01 22:41:31 -05:00
sata_sil24.c [PATCH] sata_sil24: add PMP related constants 2006-12-01 22:40:29 -05:00
sata_sis.c [PATCH] sata_sis: slave support on SiS965 2006-12-01 22:42:51 -05:00
sata_svw.c [PATCH] misc sata __iomem annotations 2006-10-10 15:37:21 -07:00
sata_sx4.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
sata_uli.c [libata] PCI ID table cleanup in various drivers 2006-09-28 20:21:59 -04:00
sata_via.c [libata] sata_via: fix obvious typo 2006-11-08 07:46:02 -05:00
sata_vsc.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00