]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.fixes/block-failfast-merge-fix
Imported linux-2.6.27.39 suse/xen patches.
[people/teissler/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.fixes / block-failfast-merge-fix
diff --git a/src/patches/suse-2.6.27.31/patches.fixes/block-failfast-merge-fix b/src/patches/suse-2.6.27.31/patches.fixes/block-failfast-merge-fix
deleted file mode 100644 (file)
index 33e4fb9..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-From ab0fd1debe730ec9998678a0c53caefbd121ed10 Mon Sep 17 00:00:00 2001
-From: Tejun Heo <tj@kernel.org>
-Date: Fri, 3 Jul 2009 12:56:18 +0200
-Subject: [PATCH] block: don't merge requests of different failfast settings
-References: bnc#519111
-
-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)>
-Signed-off-by: Tejun Heo <teheo@suse.de>
----
- block/blk-merge.c |    6 ++++++
- block/elevator.c  |    8 ++++++++
- 2 files changed, 14 insertions(+)
-
---- a/block/blk-merge.c
-+++ b/block/blk-merge.c
-@@ -376,6 +376,12 @@ static int attempt_merge(struct request_
-       if (blk_integrity_rq(req) != blk_integrity_rq(next))
-               return 0;
-+      /* don't merge requests of different failfast settings */
-+      if (blk_failfast_dev(req)       != blk_failfast_dev(next)       ||
-+          blk_failfast_transport(req) != blk_failfast_transport(next) ||
-+          blk_failfast_driver(req)    != blk_failfast_driver(next))
-+              return 0;
-+
-       /*
-        * If we are allowed to merge, then append bio list
-        * from next to rq and release next. merge_requests_fn
---- a/block/elevator.c
-+++ b/block/elevator.c
-@@ -97,6 +97,14 @@ int elv_rq_merge_ok(struct request *rq,
-       if (bio_integrity(bio) != blk_integrity_rq(rq))
-               return 0;
-+      /*
-+       * Don't merge if failfast settings don't match
-+       */
-+      if (!bio_failfast_dev(bio)       != !blk_failfast_dev(rq)       ||
-+          !bio_failfast_transport(bio) != !blk_failfast_transport(rq) ||
-+          !bio_failfast_driver(bio)    != !blk_failfast_driver(rq))
-+              return 0;
-+
-       if (!elv_iosched_allow_merge(rq, bio))
-               return 0;