summaryrefslogtreecommitdiff
path: root/block
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2012-01-15 10:29:48 +0100
committerJens Axboe <axboe@kernel.dk>2012-01-15 10:29:48 +0100
commit5d381efb3d1f1ef10535a31ca0dd9b22fe1e1922 (patch)
treefba354212902ad0c7228bff43a38aca6df47c899 /block
parent6898e3bd11cc9a931ef115eee9000ac9d8f8c3cf (diff)
Revert "block: recursive merge requests"
This reverts commit 274193224cdabd687d804a26e0150bb20f2dd52c. We have some problems related to selection of empty queues that need to be resolved, evidence so far points to the recursive merge logic making either being the cause or at least the accelerator for this. So revert it for now, until we figure this out. Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block')
-rw-r--r--block/elevator.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/block/elevator.c b/block/elevator.c
index 99838f460b44..91e18f8af9be 100644
--- a/block/elevator.c
+++ b/block/elevator.c
@@ -515,7 +515,6 @@ static bool elv_attempt_insert_merge(struct request_queue *q,
struct request *rq)
{
struct request *__rq;
- bool ret;
if (blk_queue_nomerges(q))
return false;
@@ -529,21 +528,14 @@ static bool elv_attempt_insert_merge(struct request_queue *q,
if (blk_queue_noxmerges(q))
return false;
- ret = false;
/*
* See if our hash lookup can find a potential backmerge.
*/
- while (1) {
- __rq = elv_rqhash_find(q, blk_rq_pos(rq));
- if (!__rq || !blk_attempt_req_merge(q, __rq, rq))
- break;
-
- /* The merged request could be merged with others, try again */
- ret = true;
- rq = __rq;
- }
+ __rq = elv_rqhash_find(q, blk_rq_pos(rq));
+ if (__rq && blk_attempt_req_merge(q, __rq, rq))
+ return true;
- return ret;
+ return false;
}
void elv_merged_request(struct request_queue *q, struct request *rq, int type)