linux/block
Tejun Heo ab0fd1debe block: don't merge requests of different failfast settings
Block layer used to merge requests and bios with different failfast
settings.  This caused regular IOs to fail prematurely when they were
merged into failfast requests for readahead.

Niel Lambrechts could trigger the problem semi-reliably on ext4 when
resuming from STR.  ext4 uses readahead when reading inodes and
combined with the deterministic extra SATA PHY exception cycle during
resume on the specific configuration, non-readahead inode read would
fail causing ext4 errors.  Please read the following thread for
details.

  http://lkml.org/lkml/2009/5/23/21

This patch makes block layer reject merging if the failfast settings
don't match.  This is correct but likely to lower IO performance by
preventing regular IOs from mingling into surrounding readahead
requests.  Changes to allow such mixed merges and handle errors
correctly will be added later.

Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-by: Niel Lambrechts <niel.lambrechts@gmail.com>
Cc: Theodore Tso <tytso@mit.edu>
Signed-off-by: Jens Axboe <axboe@carl.(none)>
2009-07-03 21:06:45 +02:00
..
Kconfig block: rename CONFIG_LBD to CONFIG_LBDAF 2009-06-19 08:08:50 +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
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: Restore barrier support for md and probably other virtual devices. 2009-07-01 10:56:26 +02:00
blk-exec.c block: don't set REQ_NOMERGE unnecessarily 2009-04-28 07:37:33 +02:00
blk-integrity.c block: Do away with the notion of hardsect_size 2009-05-22 23:22:54 +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: don't merge requests of different failfast settings 2009-07-03 21:06:45 +02:00
blk-settings.c Fix kernel-doc parameter name typo in blk-settings.c: 2009-06-19 09:18:32 +02:00
blk-softirq.c generic-ipi: remove CSD_FLAG_WAIT 2009-02-25 14:13:44 +01:00
blk-sysfs.c Merge branch 'for-2.6.31' of git://git.kernel.dk/linux-2.6-block 2009-06-11 11:10:35 -07: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: fix no diskstat problem 2009-05-27 14:50:02 +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: remove redundant check for NULL cfqq in cfq_set_request() 2009-07-01 12:41:14 +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: don't merge requests of different failfast settings 2009-07-03 21:06:45 +02: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
noop-iosched.c block: get rid of elevator_t typedef 2008-12-29 08:29:50 +01:00
scsi_ioctl.c block: get rid of queue-private command filter 2009-07-01 10:56:26 +02:00