]> git.baikalelectronics.ru Git - kernel.git/commit
block: don't merge requests of different failfast settings
authorTejun Heo <tj@kernel.org>
Fri, 3 Jul 2009 10:56:18 +0000 (12:56 +0200)
committerJens Axboe <axboe@carl.(none)>
Fri, 3 Jul 2009 19:06:45 +0000 (21:06 +0200)
commit5dfc8c8fb7546d8e302ce12711ca18f0eed81dff
treec44de6ef7d876a32c4f733fdc26d40cdcbf7d374
parent12fe469c3d3cbec37f1e31b1e22e80838a8f2c40
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)>
block/blk-merge.c
block/elevator.c