kernel_optimize_test/drivers/block
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 <ecashin@coraid.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
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
rsxx
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
ataflop.c
brd.c
cciss_cmd.h
cciss_scsi.c
cciss_scsi.h
cciss.c
cciss.h
cpqarray.c
cpqarray.h
cryptoloop.c move linux/loop.h to drivers/block 2013-06-29 12:46:45 +04:00
DAC960.c
DAC960.h
floppy.c
hd.c
ida_cmd.h
ida_ioctl.h
Kconfig
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
mg_disk.c
nbd.c nbd: correct disconnect behavior 2013-07-03 16:08:05 -07:00
nvme-core.c
nvme-scsi.c
osdblk.c
pktcdvd.c
ps3disk.c
ps3vram.c
rbd_types.h
rbd.c rbd: fix a couple warnings 2013-07-03 15:32:50 -07:00
smart1,2.h
sunvdc.c
swim3.c
swim_asm.S
swim.c swim: Release memory region after incorrect return/goto 2013-06-24 19:44:19 +02:00
sx8.c
umem.c
umem.h
virtio_blk.c
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