linux/block
Tejun Heo 80a761fd33 block: implement mixed merge of different failfast requests
Failfast has characteristics from other attributes.  When issuing,
executing and successuflly completing requests, failfast doesn't make
any difference.  It only affects how a request is handled on failure.
Allowing requests with different failfast settings to be merged cause
normal IOs to fail prematurely while not allowing has performance
penalties as failfast is used for read aheads which are likely to be
located near in-flight or to-be-issued normal IOs.

This patch introduces the concept of 'mixed merge'.  A request is a
mixed merge if it is merge of segments which require different
handling on failure.  Currently the only mixable attributes are
failfast ones (or lack thereof).

When a bio with different failfast settings is added to an existing
request or requests of different failfast settings are merged, the
merged request is marked mixed.  Each bio carries failfast settings
and the request always tracks failfast state of the first bio.  When
the request fails, blk_rq_err_bytes() can be used to determine how
many bytes can be safely failed without crossing into an area which
requires further retrials.

This allows request merging regardless of failfast settings while
keeping the failure handling correct.

This patch only implements mixed merge but doesn't enable it.  The
next one will update SCSI to make use of mixed merge.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Niel Lambrechts <niel.lambrechts@gmail.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
2009-09-11 14:33:30 +02:00
..
as-iosched.c block: convert to pos and nr_sectors accessors 2009-05-11 09:50:54 +02:00
blk-barrier.c block: Use accessor functions for queue limits 2009-05-22 23:22:54 +02:00
blk-core.c block: implement mixed merge of different failfast requests 2009-09-11 14:33:30 +02:00
blk-exec.c block: don't set REQ_NOMERGE unnecessarily 2009-04-28 07:37:33 +02:00
blk-integrity.c block: fix improper kobject release in blk_integrity_unregister 2009-07-28 09:11:14 +02:00
blk-ioc.c block: prevent possible io_context->refcount overflow 2009-06-10 23:07:15 +02:00
blk-map.c block: Use accessor functions for queue limits 2009-05-22 23:22:54 +02:00
blk-merge.c block: implement mixed merge of different failfast requests 2009-09-11 14:33:30 +02:00
blk-settings.c block: Update topology documentation 2009-08-01 10:24:35 +02:00
blk-softirq.c generic-ipi: remove CSD_FLAG_WAIT 2009-02-25 14:13:44 +01:00
blk-sysfs.c block: Allow changing max_sectors_kb above the default 512 2009-09-01 22:40:15 +02:00
blk-tag.c block: change the tag sync vs async restriction logic 2009-05-20 08:54:31 +02:00
blk-timeout.c block: clean up misc stuff after block layer timeout conversion 2009-04-28 07:37:34 +02:00
blk.h block: implement mixed merge of different failfast requests 2009-09-11 14:33:30 +02:00
bsg.c block: get rid of queue-private command filter 2009-07-01 10:56:26 +02:00
cfq-iosched.c cfq-iosched: reset oom_cfqq in cfq_set_request() 2009-07-10 20:31:54 +02:00
compat_ioctl.c Merge branch 'for-2.6.31' of git://git.kernel.dk/linux-2.6-block 2009-06-11 11:10:35 -07:00
deadline-iosched.c block: convert to pos and nr_sectors accessors 2009-05-11 09:50:54 +02:00
elevator.c block: fix failfast merge testing in elv_rq_merge_ok() 2009-07-17 14:50:43 +09:00
genhd.c Driver Core: block: add nodename support for block drivers. 2009-06-15 21:30:25 -07:00
ioctl.c block: Use accessor functions for queue limits 2009-05-22 23:22:54 +02:00
Kconfig Make SCSI SG v4 driver enabled by default and remove EXPERIMENTAL dependency, since udev depends on BSG 2009-08-04 22:10:17 +02:00
Kconfig.iosched update I/O sched Kconfig help texts - CFQ is now default, not AS. 2007-02-17 20:08:22 +01:00
Makefile block: get rid of queue-private command filter 2009-07-01 10:56:26 +02:00
noop-iosched.c block: get rid of elevator_t typedef 2008-12-29 08:29:50 +01:00
scsi_ioctl.c block: call blk_scsi_ioctl_init() 2009-07-10 20:31:53 +02:00