X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=block%2Felevator.c;h=96a61e029ce5e7858d2e024c08eff817b5a998d6;hb=34f9a2e4deb760ddcb94cd0cd4f9ce18070d53d9;hp=1d0759178e4b49710c6cb90c538fc6d0c897e126;hpb=1bc691d357c646700b9523d2aeca02847d3fb3f4;p=linux-2.6 diff --git a/block/elevator.c b/block/elevator.c index 1d0759178e..96a61e029c 100644 --- a/block/elevator.c +++ b/block/elevator.c @@ -139,28 +139,16 @@ static int elevator_attach(request_queue_t *q, struct elevator_type *e, static char chosen_elevator[16]; -static void elevator_setup_default(void) +static int __init elevator_setup(char *str) { - struct elevator_type *e; - /* - * If default has not been set, use the compiled-in selection. + * Be backwards-compatible with previous kernels, so users + * won't get the wrong elevator. */ - if (!chosen_elevator[0]) - strcpy(chosen_elevator, CONFIG_DEFAULT_IOSCHED); - - /* - * If the given scheduler is not available, fall back to no-op. - */ - if ((e = elevator_find(chosen_elevator))) - elevator_put(e); + if (!strcmp(str, "as")) + strcpy(chosen_elevator, "anticipatory"); else - strcpy(chosen_elevator, "noop"); -} - -static int __init elevator_setup(char *str) -{ - strncpy(chosen_elevator, str, sizeof(chosen_elevator) - 1); + strncpy(chosen_elevator, str, sizeof(chosen_elevator) - 1); return 0; } @@ -177,14 +165,16 @@ int elevator_init(request_queue_t *q, char *name) q->end_sector = 0; q->boundary_rq = NULL; - elevator_setup_default(); + if (name && !(e = elevator_get(name))) + return -EINVAL; - if (!name) - name = chosen_elevator; + if (!e && *chosen_elevator && !(e = elevator_get(chosen_elevator))) + printk("I/O scheduler %s not found\n", chosen_elevator); - e = elevator_get(name); - if (!e) - return -EINVAL; + if (!e && !(e = elevator_get(CONFIG_DEFAULT_IOSCHED))) { + printk("Default I/O scheduler not found, using no-op\n"); + e = elevator_get("noop"); + } eq = kmalloc(sizeof(struct elevator_queue), GFP_KERNEL); if (!eq) { @@ -662,8 +652,10 @@ int elv_register(struct elevator_type *e) spin_unlock_irq(&elv_list_lock); printk(KERN_INFO "io scheduler %s registered", e->elevator_name); - if (!strcmp(e->elevator_name, chosen_elevator)) - printk(" (default)"); + if (!strcmp(e->elevator_name, chosen_elevator) || + (!*chosen_elevator && + !strcmp(e->elevator_name, CONFIG_DEFAULT_IOSCHED))) + printk(" (default)"); printk("\n"); return 0; }