Ed Cashin
fb32975d1b
aoe: adjust ref of head for compound page tails
...
Fix a BUG which can trigger when direct-IO is used with AOE.
As discussed previously, the fact that some users of the block layer
provide bios that point to pages with a zero _count means that it is not
OK for the network layer to do a put_page on the skb frags during an
skb_linearize, so the aoe driver gets a reference to pages in bios and
puts the reference before ending the bio. And because it cannot use
get_page on a page with a zero _count, it manipulates the value
directly.
It is not OK to increment the _count of a compound page tail, though,
since the VM layer will VM_BUG_ON a non-zero _count. Block users that
do direct I/O can result in the aoe driver seeing compound page tails in
bios. In that case, the same logic works as long as the head of the
compound page is used instead of the tails. This patch handles compound
pages and does not BUG.
It relies on the block layer user leaving the relationship between the
page tail and its head alone for the duration between the submission of
the bio and its completion, whether successful or not.
Signed-off-by: Ed Cashin <[email protected] >
Signed-off-by: Andrew Morton <[email protected] >
Signed-off-by: Linus Torvalds <[email protected] >
2013-08-13 17:57:48 -07:00
..
aoe
aoe: adjust ref of head for compound page tails
2013-08-13 17:57:48 -07:00
drbd
drbd: Allow online change of al-stripes and al-stripe-size
2013-06-28 16:04:36 +02:00
mtip32xx
drivers: avoid parsing names as kthread_run() format strings
2013-07-03 16:07:41 -07:00
paride
block_device_operations->release() should return void
2013-05-07 02:16:21 -04:00
rsxx
rsxx: Adding in debugfs entries.
2013-06-19 13:52:10 +02:00
xen-blkback
Merge branch 'for-3.11/drivers' of git://git.kernel.dk/linux-block
2013-07-22 19:02:52 -07:00
amiflop.c
block_device_operations->release() should return void
2013-05-07 02:16:21 -04:00
ataflop.c
block_device_operations->release() should return void
2013-05-07 02:16:21 -04:00
brd.c
drivers/block/brd.c: fix brd_lookup_page() race
2013-05-24 16:22:52 -07:00
cciss.c
cciss: fix broken mutex usage in ioctl
2013-06-12 16:29:45 -07:00
cciss.h
cciss: Adds simple mode functionality
2011-08-08 11:40:15 +02:00
cciss_cmd.h
cciss: use new doorbell-bit-5 reset method
2011-05-06 08:23:55 -06:00
cciss_scsi.c
cciss: switch to ->show_info()
2013-04-09 14:13:19 -04:00
cciss_scsi.h
cciss: add cciss_tape_cmds module paramter
2011-05-06 08:23:59 -06:00
cpqarray.c
block_device_operations->release() should return void
2013-05-07 02:16:21 -04:00
cpqarray.h
cryptoloop.c
move linux/loop.h to drivers/block
2013-06-29 12:46:45 +04:00
DAC960.c
procfs: new helper - PDE_DATA(inode)
2013-04-09 14:13:32 -04:00
DAC960.h
floppy.c
Merge branch 'for-3.10/core' of git://git.kernel.dk/linux-block
2013-05-08 10:13:35 -07:00
hd.c
Remove all #inclusions of asm/system.h
2012-03-28 18:30:03 +01:00
ida_cmd.h
ida_ioctl.h
Kconfig
rsxx: Changing the adapter name to the official name.
2013-06-19 13:52:09 +02:00
loop.c
move linux/loop.h to drivers/block
2013-06-29 12:46:45 +04:00
loop.h
move linux/loop.h to drivers/block
2013-06-29 12:46:45 +04:00
Makefile
NVMe: Add nvme-scsi.c
2013-03-28 14:50:49 -04:00
mg_disk.c
Merge branch 'for-3.10/drivers' of git://git.kernel.dk/linux-block
2013-05-08 11:51:05 -07:00
nbd.c
nbd: correct disconnect behavior
2013-07-03 16:08:05 -07:00
nvme-core.c
NVMe: Add MSI support
2013-05-31 11:45:52 -04:00
nvme-scsi.c
NVMe: Fix a signedness bug in nvme_trans_modesel_get_mp
2013-05-17 09:10:38 -04:00
osdblk.c
block: Add bio_clone_bioset(), bio_clone_kmalloc()
2012-09-09 10:35:39 +02:00
pktcdvd.c
pktcdvd: silence static checker warning
2013-05-29 15:36:22 +02:00
ps3disk.c
Drivers: block: remove __dev* attributes.
2013-01-03 15:57:15 -08:00
ps3vram.c
procfs: new helper - PDE_DATA(inode)
2013-04-09 14:13:32 -04:00
rbd.c
rbd: fix a couple warnings
2013-07-03 15:32:50 -07:00
rbd_types.h
rbd: get rid of RBD_MAX_SEG_NAME_LEN
2012-12-17 08:37:29 -06:00
smart1,2.h
sunvdc.c
sunvdc: Fix off-by-one in generic_request().
2013-02-14 11:49:01 -08:00
swim.c
swim: Release memory region after incorrect return/goto
2013-06-24 19:44:19 +02:00
swim3.c
block_device_operations->release() should return void
2013-05-07 02:16:21 -04:00
swim_asm.S
sx8.c
block, sx8: fix pointer math issue getting fw version
2012-03-03 19:44:39 +01:00
umem.c
Drivers: block: remove __dev* attributes.
2013-01-03 15:57:15 -08:00
umem.h
virtio_blk.c
virtio_blk: Add missing 'static' qualifiers
2013-05-20 12:09:23 +09:30
xen-blkfront.c
Merge branch 'stable/for-jens-3.10' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen into for-3.11/drivers
2013-06-28 16:01:14 +02:00
xsysace.c
xilinx systemace: Fix sparse warnings
2013-07-10 07:47:12 +02:00
z2ram.c
block_device_operations->release() should return void
2013-05-07 02:16:21 -04:00