diff options
| author | Jens Axboe <axboe@suse.de> | 2002-09-25 18:06:51 -0700 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2002-09-25 18:06:51 -0700 |
| commit | 82c8a4cccbe478378e7aa2c9d45e029866ecac78 (patch) | |
| tree | 7d89d17d812199af6b2a56b13002848fdbdbbbab /include | |
| parent | 9b34eb708314dd0786b8a904f5c223be55123ff2 (diff) | |
[PATCH] deadline ioscheduler cleanups
Some various small cleanups, optimizations, and fixes.
o Make fifo_batch=32 as default, from testing this appears a good
default value. We still get good throughput, and latency is good.
o Reintroduce the merge_cleanup logic. We need it for deadline for
rehashing requests when they have been merged.
o Cleanup last_merge logic. Move it to the new elv_merged_request(),
this is where it really belongs. Doing it inside the io scheduler core
can causes false positives, when the queue merge functions reject an
otherwise good merge
o Have deadline_move_requests() account from last entry on the dispatch
queue, if it is non-empty. It doesn't really matter what the last
extracted sector was, if we are not right behind it.
o Clean/optimize deadline_move_requests()
o Account size of a request just a little bit. Streaming transfer isn't
for free, it's just a lot cheaper than a seek.
o Make deadline_check_fifo() more readable.
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/elevator.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/include/linux/elevator.h b/include/linux/elevator.h index c5cc69788530..b18faeef9955 100644 --- a/include/linux/elevator.h +++ b/include/linux/elevator.h @@ -6,6 +6,8 @@ typedef int (elevator_merge_fn) (request_queue_t *, struct request **, typedef void (elevator_merge_req_fn) (request_queue_t *, struct request *, struct request *); +typedef void (elevator_merged_fn) (request_queue_t *, struct request *); + typedef struct request *(elevator_next_req_fn) (request_queue_t *); typedef void (elevator_add_req_fn) (request_queue_t *, struct request *, struct list_head *); @@ -19,6 +21,7 @@ typedef void (elevator_exit_fn) (request_queue_t *, elevator_t *); struct elevator_s { elevator_merge_fn *elevator_merge_fn; + elevator_merged_fn *elevator_merged_fn; elevator_merge_req_fn *elevator_merge_req_fn; elevator_next_req_fn *elevator_next_req_fn; @@ -42,6 +45,7 @@ extern void __elv_add_request(request_queue_t *, struct request *, extern int elv_merge(request_queue_t *, struct request **, struct bio *); extern void elv_merge_requests(request_queue_t *, struct request *, struct request *); +extern void elv_merged_request(request_queue_t *, struct request *); extern void elv_remove_request(request_queue_t *, struct request *); extern int elv_queue_empty(request_queue_t *); extern inline struct list_head *elv_get_sort_head(request_queue_t *, struct request *); |
