diff options
author | Mauro Carvalho Chehab <mchehab@infradead.org> | 2006-01-31 15:49:28 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2006-01-31 15:49:28 -0500 |
commit | 638e174688f58200d0deb7435093435e7d737b09 (patch) | |
tree | a2cd32dbb41daf0a5d4e69eff1805fd5574c292a /block | |
parent | 8d58d773b745950ac912e028b3c81f4902fbf91d (diff) | |
parent | d195ea4b1456192abe780fd773778cbe9f6d77ea (diff) |
Merge branch 'origin'
Diffstat (limited to 'block')
-rw-r--r-- | block/elevator.c | 45 | ||||
-rw-r--r-- | block/ll_rw_blk.c | 7 |
2 files changed, 20 insertions, 32 deletions
diff --git a/block/elevator.c b/block/elevator.c index c9f424d539..96a61e029c 100644 --- a/block/elevator.c +++ b/block/elevator.c | |||
@@ -139,35 +139,16 @@ static int elevator_attach(request_queue_t *q, struct elevator_type *e, | |||
139 | 139 | ||
140 | static char chosen_elevator[16]; | 140 | static char chosen_elevator[16]; |
141 | 141 | ||
142 | static void elevator_setup_default(void) | 142 | static int __init elevator_setup(char *str) |
143 | { | 143 | { |
144 | struct elevator_type *e; | ||
145 | |||
146 | /* | ||
147 | * If default has not been set, use the compiled-in selection. | ||
148 | */ | ||
149 | if (!chosen_elevator[0]) | ||
150 | strcpy(chosen_elevator, CONFIG_DEFAULT_IOSCHED); | ||
151 | |||
152 | /* | 144 | /* |
153 | * Be backwards-compatible with previous kernels, so users | 145 | * Be backwards-compatible with previous kernels, so users |
154 | * won't get the wrong elevator. | 146 | * won't get the wrong elevator. |
155 | */ | 147 | */ |
156 | if (!strcmp(chosen_elevator, "as")) | 148 | if (!strcmp(str, "as")) |
157 | strcpy(chosen_elevator, "anticipatory"); | 149 | strcpy(chosen_elevator, "anticipatory"); |
158 | |||
159 | /* | ||
160 | * If the given scheduler is not available, fall back to the default | ||
161 | */ | ||
162 | if ((e = elevator_find(chosen_elevator))) | ||
163 | elevator_put(e); | ||
164 | else | 150 | else |
165 | strcpy(chosen_elevator, CONFIG_DEFAULT_IOSCHED); | 151 | strncpy(chosen_elevator, str, sizeof(chosen_elevator) - 1); |
166 | } | ||
167 | |||
168 | static int __init elevator_setup(char *str) | ||
169 | { | ||
170 | strncpy(chosen_elevator, str, sizeof(chosen_elevator) - 1); | ||
171 | return 0; | 152 | return 0; |
172 | } | 153 | } |
173 | 154 | ||
@@ -184,14 +165,16 @@ int elevator_init(request_queue_t *q, char *name) | |||
184 | q->end_sector = 0; | 165 | q->end_sector = 0; |
185 | q->boundary_rq = NULL; | 166 | q->boundary_rq = NULL; |
186 | 167 | ||
187 | elevator_setup_default(); | 168 | if (name && !(e = elevator_get(name))) |
169 | return -EINVAL; | ||
188 | 170 | ||
189 | if (!name) | 171 | if (!e && *chosen_elevator && !(e = elevator_get(chosen_elevator))) |
190 | name = chosen_elevator; | 172 | printk("I/O scheduler %s not found\n", chosen_elevator); |
191 | 173 | ||
192 | e = elevator_get(name); | 174 | if (!e && !(e = elevator_get(CONFIG_DEFAULT_IOSCHED))) { |
193 | if (!e) | 175 | printk("Default I/O scheduler not found, using no-op\n"); |
194 | return -EINVAL; | 176 | e = elevator_get("noop"); |
177 | } | ||
195 | 178 | ||
196 | eq = kmalloc(sizeof(struct elevator_queue), GFP_KERNEL); | 179 | eq = kmalloc(sizeof(struct elevator_queue), GFP_KERNEL); |
197 | if (!eq) { | 180 | if (!eq) { |
@@ -669,8 +652,10 @@ int elv_register(struct elevator_type *e) | |||
669 | spin_unlock_irq(&elv_list_lock); | 652 | spin_unlock_irq(&elv_list_lock); |
670 | 653 | ||
671 | printk(KERN_INFO "io scheduler %s registered", e->elevator_name); | 654 | printk(KERN_INFO "io scheduler %s registered", e->elevator_name); |
672 | if (!strcmp(e->elevator_name, chosen_elevator)) | 655 | if (!strcmp(e->elevator_name, chosen_elevator) || |
673 | printk(" (default)"); | 656 | (!*chosen_elevator && |
657 | !strcmp(e->elevator_name, CONFIG_DEFAULT_IOSCHED))) | ||
658 | printk(" (default)"); | ||
674 | printk("\n"); | 659 | printk("\n"); |
675 | return 0; | 660 | return 0; |
676 | } | 661 | } |
diff --git a/block/ll_rw_blk.c b/block/ll_rw_blk.c index 8e27d0ab0d..d38b4afa37 100644 --- a/block/ll_rw_blk.c +++ b/block/ll_rw_blk.c | |||
@@ -304,6 +304,7 @@ static inline void rq_init(request_queue_t *q, struct request *rq) | |||
304 | * blk_queue_ordered - does this queue support ordered writes | 304 | * blk_queue_ordered - does this queue support ordered writes |
305 | * @q: the request queue | 305 | * @q: the request queue |
306 | * @ordered: one of QUEUE_ORDERED_* | 306 | * @ordered: one of QUEUE_ORDERED_* |
307 | * @prepare_flush_fn: rq setup helper for cache flush ordered writes | ||
307 | * | 308 | * |
308 | * Description: | 309 | * Description: |
309 | * For journalled file systems, doing ordered writes on a commit | 310 | * For journalled file systems, doing ordered writes on a commit |
@@ -332,6 +333,7 @@ int blk_queue_ordered(request_queue_t *q, unsigned ordered, | |||
332 | return -EINVAL; | 333 | return -EINVAL; |
333 | } | 334 | } |
334 | 335 | ||
336 | q->ordered = ordered; | ||
335 | q->next_ordered = ordered; | 337 | q->next_ordered = ordered; |
336 | q->prepare_flush_fn = prepare_flush_fn; | 338 | q->prepare_flush_fn = prepare_flush_fn; |
337 | 339 | ||
@@ -662,7 +664,7 @@ EXPORT_SYMBOL(blk_queue_bounce_limit); | |||
662 | * Enables a low level driver to set an upper limit on the size of | 664 | * Enables a low level driver to set an upper limit on the size of |
663 | * received requests. | 665 | * received requests. |
664 | **/ | 666 | **/ |
665 | void blk_queue_max_sectors(request_queue_t *q, unsigned short max_sectors) | 667 | void blk_queue_max_sectors(request_queue_t *q, unsigned int max_sectors) |
666 | { | 668 | { |
667 | if ((max_sectors << 9) < PAGE_CACHE_SIZE) { | 669 | if ((max_sectors << 9) < PAGE_CACHE_SIZE) { |
668 | max_sectors = 1 << (PAGE_CACHE_SHIFT - 9); | 670 | max_sectors = 1 << (PAGE_CACHE_SHIFT - 9); |
@@ -2632,6 +2634,7 @@ EXPORT_SYMBOL(blk_put_request); | |||
2632 | /** | 2634 | /** |
2633 | * blk_end_sync_rq - executes a completion event on a request | 2635 | * blk_end_sync_rq - executes a completion event on a request |
2634 | * @rq: request to complete | 2636 | * @rq: request to complete |
2637 | * @error: end io status of the request | ||
2635 | */ | 2638 | */ |
2636 | void blk_end_sync_rq(struct request *rq, int error) | 2639 | void blk_end_sync_rq(struct request *rq, int error) |
2637 | { | 2640 | { |
@@ -3153,7 +3156,7 @@ static int __end_that_request_first(struct request *req, int uptodate, | |||
3153 | if (blk_fs_request(req) && req->rq_disk) { | 3156 | if (blk_fs_request(req) && req->rq_disk) { |
3154 | const int rw = rq_data_dir(req); | 3157 | const int rw = rq_data_dir(req); |
3155 | 3158 | ||
3156 | __disk_stat_add(req->rq_disk, sectors[rw], nr_bytes >> 9); | 3159 | disk_stat_add(req->rq_disk, sectors[rw], nr_bytes >> 9); |
3157 | } | 3160 | } |
3158 | 3161 | ||
3159 | total_bytes = bio_nbytes = 0; | 3162 | total_bytes = bio_nbytes = 0; |