Skip to content

Commit

Permalink
[PATCH] noop-iosched: kill O(N) merge scan
Browse files Browse the repository at this point in the history
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>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Jens Axboe authored and Linus Torvalds committed May 1, 2005
1 parent 41f11a4 commit 1181c1f
Showing 1 changed file with 3 additions and 24 deletions.
27 changes: 3 additions & 24 deletions drivers/block/noop-iosched.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit 1181c1f

Please sign in to comment.