Revision 729a6a300e628a48cf12bac93a964a535e83cd1d authored by Tejun Heo on 20 January 2011, 12:59:06 UTC, committed by Jeff Garzik on 28 January 2011, 08:16:20 UTC
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>
1 parent 4a5610a
History
File Mode Size
9p
adfs
affs
afs
autofs4
befs
bfs
btrfs
cachefiles
ceph
cifs
coda
configfs
cramfs
debugfs
devpts
dlm
ecryptfs
efs
exofs
exportfs
ext2
ext3
ext4
fat
freevxfs
fscache
fuse
gfs2
hfs
hfsplus
hostfs
hpfs
hppfs
hugetlbfs
isofs
jbd
jbd2
jffs2
jfs
lockd
logfs
minix
ncpfs
nfs
nfs_common
nfsd
nilfs2
nls
notify
ntfs
ocfs2
omfs
openpromfs
partitions
proc
qnx4
quota
ramfs
reiserfs
romfs
squashfs
sysfs
sysv
ubifs
udf
ufs
xfs
Kconfig -rw-r--r-- 5.3 KB
Kconfig.binfmt -rw-r--r-- 6.4 KB
Makefile -rw-r--r-- 4.0 KB
aio.c -rw-r--r-- 46.6 KB
anon_inodes.c -rw-r--r-- 6.3 KB
attr.c -rw-r--r-- 6.6 KB
bad_inode.c -rw-r--r-- 7.8 KB
binfmt_aout.c -rw-r--r-- 12.4 KB
binfmt_elf.c -rw-r--r-- 53.7 KB
binfmt_elf_fdpic.c -rw-r--r-- 48.7 KB
binfmt_em86.c -rw-r--r-- 2.8 KB
binfmt_flat.c -rw-r--r-- 26.8 KB
binfmt_misc.c -rw-r--r-- 15.2 KB
binfmt_script.c -rw-r--r-- 2.8 KB
binfmt_som.c -rw-r--r-- 7.4 KB
bio-integrity.c -rw-r--r-- 21.2 KB
bio.c -rw-r--r-- 39.5 KB
block_dev.c -rw-r--r-- 39.1 KB
buffer.c -rw-r--r-- 87.2 KB
char_dev.c -rw-r--r-- 13.8 KB
compat.c -rw-r--r-- 55.6 KB
compat_binfmt_elf.c -rw-r--r-- 3.5 KB
compat_ioctl.c -rw-r--r-- 45.8 KB
dcache.c -rw-r--r-- 78.0 KB
dcookies.c -rw-r--r-- 6.8 KB
direct-io.c -rw-r--r-- 35.2 KB
drop_caches.c -rw-r--r-- 1.3 KB
eventfd.c -rw-r--r-- 11.0 KB
eventpoll.c -rw-r--r-- 38.9 KB
exec.c -rw-r--r-- 48.6 KB
fcntl.c -rw-r--r-- 18.3 KB
fifo.c -rw-r--r-- 3.2 KB
file.c -rw-r--r-- 11.7 KB
file_table.c -rw-r--r-- 12.1 KB
filesystems.c -rw-r--r-- 6.4 KB
fs-writeback.c -rw-r--r-- 34.2 KB
fs_struct.c -rw-r--r-- 3.9 KB
generic_acl.c -rw-r--r-- 4.7 KB
inode.c -rw-r--r-- 44.1 KB
internal.h -rw-r--r-- 2.8 KB
ioctl.c -rw-r--r-- 15.7 KB
ioprio.c -rw-r--r-- 5.0 KB
libfs.c -rw-r--r-- 25.3 KB
locks.c -rw-r--r-- 58.4 KB
mbcache.c -rw-r--r-- 16.3 KB
mpage.c -rw-r--r-- 19.7 KB
namei.c -rw-r--r-- 88.3 KB
namespace.c -rw-r--r-- 63.1 KB
nfsctl.c -rw-r--r-- 2.4 KB
no-block.c -rw-r--r-- 688 bytes
open.c -rw-r--r-- 23.9 KB
pipe.c -rw-r--r-- 28.4 KB
pnode.c -rw-r--r-- 9.3 KB
pnode.h -rw-r--r-- 1.1 KB
posix_acl.c -rw-r--r-- 8.4 KB
read_write.c -rw-r--r-- 20.8 KB
read_write.h -rw-r--r-- 542 bytes
readdir.c -rw-r--r-- 6.9 KB
select.c -rw-r--r-- 24.3 KB
seq_file.c -rw-r--r-- 17.8 KB
signalfd.c -rw-r--r-- 7.5 KB
splice.c -rw-r--r-- 46.5 KB
stack.c -rw-r--r-- 2.7 KB
stat.c -rw-r--r-- 10.5 KB
statfs.c -rw-r--r-- 5.2 KB
super.c -rw-r--r-- 26.8 KB
sync.c -rw-r--r-- 9.9 KB
timerfd.c -rw-r--r-- 6.5 KB
utimes.c -rw-r--r-- 5.6 KB
xattr.c -rw-r--r-- 15.6 KB
xattr_acl.c -rw-r--r-- 2.3 KB

back to top