linux/drivers/ata
Tejun Heo 729a6a300e libata: set queue DMA alignment to sector size for ATAPI too
ata_pio_sectors() expects buffer for each sector to be contained in a
single page; otherwise, it ends up overrunning the first page.  This
is achieved by setting queue DMA alignment.  If sector_size is smaller
than PAGE_SIZE and all buffers are sector_size aligned, buffer for
each sector is always contained in a single page.

This wasn't applied to ATAPI devices but IDENTIFY_PACKET is executed
as ATA_PROT_PIO and thus uses ata_pio_sectors().  Newer versions of
udev issue IDENTIFY_PACKET with unaligned buffer triggering the
problem and causing oops.

This patch fixes the problem by setting sdev->sector_size to
ATA_SECT_SIZE on ATATPI devices and always setting DMA alignment to
sector_size.  While at it, add a warning for the unlikely but still
possible scenario where sector_size is larger than PAGE_SIZE, in which
case the alignment wouldn't be enough.

Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-by: John Stanley <jpsinthemix@verizon.net>
Tested-by: John Stanley <jpsinthemix@verizon.net>
Cc: stable@kernel.org
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
2011-01-28 03:16:20 -05:00
..
acard-ahci.c [libata] new driver acard_ahci, for ATP8620 host controller 2011-01-05 19:43:22 -05:00
ahci_platform.c libata: reimplement link power management 2010-10-21 20:21:04 -04:00
ahci.c ahci: add HFLAG_YES_FBS and apply it to 88SE9128 2011-01-28 03:07:04 -05:00
ahci.h [libata] new driver acard_ahci, for ATP8620 host controller 2011-01-05 19:43:22 -05:00
ata_generic.c ata: Intel IDE-R support 2010-10-21 20:21:05 -04:00
ata_piix.c ata_piix: Add device ID for ICH4-L 2010-10-21 20:21:05 -04:00
Kconfig kconfig: rename CONFIG_EMBEDDED to CONFIG_EXPERT 2011-01-20 17:02:05 -08:00
libahci.c [libata] new driver acard_ahci, for ATP8620 host controller 2011-01-05 19:43:22 -05:00
libata-acpi.c gcc-4.6: ACPI: fix unused but set variables in ACPI 2010-08-15 00:53:08 -04:00
libata-core.c libata: DVR-212D can't do SETXFER DVD-RW DVR-212D 2011-01-28 03:16:04 -05:00
libata-eh.c libata: issue DIPM enable commands with LPM state updated 2010-12-24 13:34:34 -05:00
libata-pmp.c libata: implement LPM support for port multipliers 2010-10-21 20:21:04 -04:00
libata-scsi.c libata: set queue DMA alignment to sector size for ATAPI too 2011-01-28 03:16:20 -05:00
libata-sff.c Merge branch 'for-2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq 2011-01-07 16:58:04 -08:00
libata-transport.c drivers/ata/libata-transport.c: include linux/slab.h 2010-10-21 20:21:04 -04:00
libata-transport.h [libata] Add ATA transport class 2010-10-21 20:21:03 -04:00
libata.h libata: implement cross-port EH exclusion 2010-10-21 20:21:05 -04:00
Makefile [libata] new driver acard_ahci, for ATP8620 host controller 2011-01-05 19:43:22 -05:00
pata_acpi.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_ali.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_amd.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_artop.c pata_artop: Fix device ID parity check 2010-09-09 14:19:18 -04:00
pata_at32.c
pata_at91.c
pata_atiixp.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_atp867x.c
pata_bf54x.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
pata_cmd64x.c pata_cmd64x: revert commit d62f5576 2010-08-25 19:24:15 -04:00
pata_cmd640.c pata_cmd640: implement sff_irq_check() method 2010-10-21 20:21:05 -04:00
pata_cs5520.c
pata_cs5530.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_cs5535.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_cs5536.c pata_cs5536: avoid implicit MSR API inclusion on x86-64 2010-12-26 19:42:15 -05:00
pata_cypress.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_efar.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_hpt3x2n.c pata_hpt{37x|3x2n}: use pr_*(DRV_NAME ...) instead of printk(KERN_* ...) 2011-01-28 03:07:04 -05:00
pata_hpt3x3.c
pata_hpt37x.c pata_hpt37x: inherit prereset() method for HPT374 2011-01-28 03:07:04 -05:00
pata_hpt366.c pata_hpt{366|37x}: use pr_warning(...) instead of printk(KERN_WARNING ...) 2011-01-28 03:07:04 -05:00
pata_icside.c
pata_isapnp.c
pata_it821x.c Update broken web addresses in the kernel. 2010-10-18 11:03:14 +02:00
pata_it8213.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_ixp4xx_cf.c
pata_jmicron.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_legacy.c pata_legacy: fix CONFIG_PATA_WINBOND_VLB_MODULE test 2010-11-12 17:10:53 -05:00
pata_macio.c powerpc/macio: Fix probing of macio devices by using the right of match table 2010-06-02 17:50:38 +10:00
pata_marvell.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_mpc52xx.c pata_mpc52xx: inherit from ata_bmdma_port_ops 2011-01-28 03:07:04 -05:00
pata_mpiix.c
pata_netcell.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_ninja32.c
pata_ns87410.c
pata_ns87415.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_octeon_cf.c drivers/ata/pata_octeon_cf.c: delete double assignment 2010-11-12 17:10:55 -05:00
pata_of_platform.c of/device: Replace struct of_device with struct platform_device 2010-08-06 09:25:50 -06:00
pata_oldpiix.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_opti.c
pata_optidma.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_palmld.c
pata_pcmcia.c pcmcia: move driver name to struct pcmcia_driver 2010-09-29 17:20:24 +02:00
pata_pdc202xx_old.c pata_pdc202xx_old: implement sff_irq_check() method 2010-10-21 20:21:06 -04:00
pata_pdc2027x.c
pata_piccolo.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_platform.c
pata_pxa.c [ARM] pata_pxa: DMA-capable PATA driver 2010-06-18 15:07:32 +08:00
pata_qdi.c
pata_radisys.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_rb532_cf.c
pata_rdc.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_rz1000.c
pata_samsung_cf.c libata: add @ap to ata_wait_register() and introduce ata_msleep() 2010-10-21 20:21:05 -04:00
pata_sc1200.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_scc.c libata: add @ap to ata_wait_register() and introduce ata_msleep() 2010-10-21 20:21:05 -04:00
pata_sch.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_serverworks.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_sil680.c pata_sil680: implement sff_irq_check() method 2010-10-21 20:21:06 -04:00
pata_sis.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_sl82c105.c pata_sl82c105: implement sff_irq_check() method 2010-10-21 20:21:06 -04:00
pata_triflex.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
pata_via.c libata,pata_via: revert ata_wait_idle() removal from ata_sff/via_tf_load() 2010-09-09 22:27:44 -04:00
pdc_adma.c
sata_dwc_460ex.c [libata] sata_dwc_460ex: signdness bug 2010-08-25 19:24:16 -04:00
sata_fsl.c libata: add @ap to ata_wait_register() and introduce ata_msleep() 2010-10-21 20:21:05 -04:00
sata_inic162x.c libata: add @ap to ata_wait_register() and introduce ata_msleep() 2010-10-21 20:21:05 -04:00
sata_mv.c libata: always use ata_qc_complete_multiple() for NCQ command completions 2010-10-21 20:21:03 -04:00
sata_nv.c libata: always use ata_qc_complete_multiple() for NCQ command completions 2010-10-21 20:21:03 -04:00
sata_promise.c
sata_promise.h
sata_qstor.c libata-sff: kill dummy BMDMA ops from sata_qstor and pata_octeon_cf 2010-05-25 19:40:45 -04:00
sata_sil24.c libata: add @ap to ata_wait_register() and introduce ata_msleep() 2010-10-21 20:21:05 -04:00
sata_sil.c
sata_sis.c libata-sff: separate out BMDMA init 2010-05-25 19:40:30 -04:00
sata_svw.c
sata_sx4.c
sata_uli.c
sata_via.c sata_via: apply magic FIFO fix to vt6420 too 2010-11-19 13:16:26 -05:00
sata_vsc.c tree-wide: fix comment/printk typos 2010-11-01 15:38:34 -04:00
sis.h