
From: Jens Axboe <axboe@suse.de>

Profiling hit rates on merging shows that the last merge hint works
extremely well for most work loads.  So lets kill the linear merge scan in
noop-iosched, so it provides O(1) run time for any operation.

Testing credits go to Ken Chen from Intel.

Signed-off-by: Jens Axboe <axboe@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/drivers/block/noop-iosched.c |   27 +++------------------------
 1 files changed, 3 insertions(+), 24 deletions(-)

diff -puN drivers/block/noop-iosched.c~noop-iosched-kill-on-merge-scan drivers/block/noop-iosched.c
--- 25/drivers/block/noop-iosched.c~noop-iosched-kill-on-merge-scan	2005-04-13 00:56:45.975952040 -0700
+++ 25-akpm/drivers/block/noop-iosched.c	2005-04-13 00:56:45.978951584 -0700
@@ -13,34 +13,13 @@
 static int elevator_noop_merge(request_queue_t *q, struct request **req,
 			       struct bio *bio)
 {
-	struct list_head *entry = &q->queue_head;
-	struct request *__rq;
 	int ret;
 
-	if ((ret = elv_try_last_merge(q, bio))) {
+	ret = elv_try_last_merge(q, bio);
+	if (ret != ELEVATOR_NO_MERGE)
 		*req = q->last_merge;
-		return ret;
-	}
 
-	while ((entry = entry->prev) != &q->queue_head) {
-		__rq = list_entry_rq(entry);
-
-		if (__rq->flags & (REQ_SOFTBARRIER | REQ_HARDBARRIER))
-			break;
-		else if (__rq->flags & REQ_STARTED)
-			break;
-
-		if (!blk_fs_request(__rq))
-			continue;
-
-		if ((ret = elv_try_merge(__rq, bio))) {
-			*req = __rq;
-			q->last_merge = __rq;
-			return ret;
-		}
-	}
-
-	return ELEVATOR_NO_MERGE;
+	return ret;
 }
 
 static void elevator_noop_merge_requests(request_queue_t *q, struct request *req,
_
