From 6245e8ee5d457d233fb72a46eebf244ed11eb71d Mon Sep 17 00:00:00 2001 From: Shaohua Li Date: Fri, 9 Nov 2012 08:44:27 +0100 Subject: [PATCH] --- yaml --- r: 345663 b: refs/heads/master c: bee0393cc12b6d8f10e884e555a095e050e0b2b9 h: refs/heads/master i: 345661: b3e15202dd1b7c1bc28b694995e503316f696856 345659: f68891b60fb1db51e0c530575bfda3c0e6b2b345 345655: 571dde4c5b7c60783a8f00419352c5d7d811be5a 345647: e1a113fc778a02fdf95ac4521b23a75bd9964a59 345631: bb62c21321dd8c2fad9b692efdae2257fe93798e 345599: aaac4fa127fbdcc862eac359156af6c7be553b4b v: v3 --- [refs] | 2 +- trunk/block/elevator.c | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index fdc3e8206ff5..cb4d232335fb 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3d106fba2e7eb6967b1e2cc147a6894ec4307cef +refs/heads/master: bee0393cc12b6d8f10e884e555a095e050e0b2b9 diff --git a/trunk/block/elevator.c b/trunk/block/elevator.c index 9b1d42b62f20..9edba1b8323e 100644 --- a/trunk/block/elevator.c +++ b/trunk/block/elevator.c @@ -458,6 +458,7 @@ 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; @@ -471,14 +472,21 @@ 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. */ - __rq = elv_rqhash_find(q, blk_rq_pos(rq)); - if (__rq && blk_attempt_req_merge(q, __rq, rq)) - return true; + while (1) { + __rq = elv_rqhash_find(q, blk_rq_pos(rq)); + if (!__rq || !blk_attempt_req_merge(q, __rq, rq)) + break; - return false; + /* The merged request could be merged with others, try again */ + ret = true; + rq = __rq; + } + + return ret; } void elv_merged_request(struct request_queue *q, struct request *rq, int type)