kernel_optimize_test/drivers/block
Keith Busch 427e970801 NVMe: Split non-mergeable bio requests
It is possible a bio request can not be submitted as a single NVMe IO
command if the bio_vec is not mergeable with the NVMe PRP alignement
constraints. This condition was handled by submitting an IO for the
mergeable portion then submitting a follow on IO for the remaining data
after the previous IO completes. The remainder to be sent was tracked
by manipulating the bio->bi_idx and bio->bi_sector. This patch splits
the request as many times as necessary and submits the bios together.

Since submitting the bio may cause it to be requeued on split,
nvme_resubmit_bios had to be modified to remove the wait queue when
the bio list is empty prior to submitting the bio since a split would
have added the wait queue a second time, corrupting the wait queue head
task list.

There are a few other benefits from doing this: it fixes a potential
issue with the previous handling of a non-mergeable bio as the requeuing
method could would use an unlocked nvme_queue if the callback isn't
invoked on the queue's associated cpu; it will be possible to retry a
failed bio if desired at some later time since it does not manipulate
the original bio; the bio integrity extensions require the bio to be in
its original condition for the checks to work correctly if we implement
the end-to-end data protection in the future.

Signed-off-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com>
2013-05-02 14:38:59 -04:00
..
aoe aoe: fix use after free in aoedev_by_aoeaddr() 2012-12-17 17:15:26 -08:00
drbd drbd: convert to idr_alloc() 2013-02-27 19:10:15 -08:00
mtip32xx Merge branch 'stable/for-jens-3.9' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen into for-3.9/drivers 2013-02-20 08:26:06 +01:00
paride drivers/block/paride: remove depends on CONFIG_EXPERIMENTAL 2013-01-21 14:52:42 -08:00
rsxx block: IBM RamSan 70/80 driver fixes 2013-02-18 21:35:59 +01:00
xen-blkback xen-blkback: use balloon pages for persistent grants 2013-02-19 15:17:21 -05:00
amiflop.c
ataflop.c
brd.c
cciss_cmd.h
cciss_scsi.c
cciss_scsi.h
cciss.c Drivers: block: remove __dev* attributes. 2013-01-03 15:57:15 -08:00
cciss.h
cpqarray.c Drivers: block: remove __dev* attributes. 2013-01-03 15:57:15 -08:00
cpqarray.h
cryptoloop.c
DAC960.c Merge branch 'for-3.9/drivers' of git://git.kernel.dk/linux-block 2013-02-28 13:16:07 -08:00
DAC960.h
floppy.c floppy: destroy floppy workqueue before cleaning up the queue 2012-11-23 14:32:54 +01:00
hd.c
ida_cmd.h
ida_ioctl.h
Kconfig Merge branch 'delete-xt-disk' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux into for-3.9/drivers 2013-02-14 16:29:34 +01:00
loop.c Merge branch 'for-3.9/drivers' of git://git.kernel.dk/linux-block 2013-02-28 13:16:07 -08:00
Makefile NVMe: Add nvme-scsi.c 2013-03-28 14:50:49 -04:00
mg_disk.c
nbd.c nbd: fix sparse warning 2013-02-27 19:10:22 -08:00
nvme-core.c NVMe: Split non-mergeable bio requests 2013-05-02 14:38:59 -04:00
nvme-scsi.c NVMe: Add scsi unmap to SG_IO 2013-05-02 14:32:08 -04:00
osdblk.c
pktcdvd.c
ps3disk.c Drivers: block: remove __dev* attributes. 2013-01-03 15:57:15 -08:00
ps3vram.c Drivers: block: remove __dev* attributes. 2013-01-03 15:57:15 -08:00
rbd_types.h rbd: get rid of RBD_MAX_SEG_NAME_LEN 2012-12-17 08:37:29 -06:00
rbd.c libceph: update osd request/reply encoding 2013-02-26 15:02:50 -08:00
smart1,2.h
sunvdc.c sunvdc: Fix off-by-one in generic_request(). 2013-02-14 11:49:01 -08:00
swim_asm.S
swim.c swim: Add missing spinlock init 2013-02-09 14:23:33 +01:00
swim3.c drivers/block/swim3.c: fix null pointer dereference 2013-02-22 10:42:46 +01:00
sx8.c
umem.c Drivers: block: remove __dev* attributes. 2013-01-03 15:57:15 -08:00
umem.h
virtio_blk.c Various minor fixes, but a slightly more complex one to fix the per-cpu overload 2013-01-20 16:44:28 -08:00
xen-blkfront.c xen-blkfront: drop the use of llist_for_each_entry_safe 2013-02-19 15:17:08 -05:00
xsysace.c Drivers: block: remove __dev* attributes. 2013-01-03 15:57:15 -08:00
z2ram.c