From 248d5ca5ed5feb7f1a68d213c0ff89c604a97179 Mon Sep 17 00:00:00 2001 From: Nate Diller Date: Tue, 24 Jan 2006 10:09:14 +0100 Subject: [BLOCK] elevator: allow default scheduler to potentially be modular Jens has decided that allowing the default scheduler to be a module is a bug, and should not be allowed under kconfig. However, I find that scenario useful for debugging, and wish for the kernel to be able to handle this situation without OOPSing, if I enable such an option in the .config directly. This patch dynamically checks for the presence of the compiled-in default, and falls back to no-op, emitting a suitable error message, when the default is not available Tested for a range of boot options on 2.6.16-rc1-mm2. Signed-off-by: Nate Diller Signed-off-by: Jens Axboe --- block/elevator.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'block') diff --git a/block/elevator.c b/block/elevator.c index dbbea73a8b10..96a61e029ce5 100644 --- a/block/elevator.c +++ b/block/elevator.c @@ -168,10 +168,12 @@ int elevator_init(request_queue_t *q, char *name) if (name && !(e = elevator_get(name))) return -EINVAL; - if (!e && !(e = elevator_get(chosen_elevator))) { - e = elevator_get(CONFIG_DEFAULT_IOSCHED); - if (*chosen_elevator) - printk("I/O scheduler %s not found\n", chosen_elevator); + if (!e && *chosen_elevator && !(e = elevator_get(chosen_elevator))) + printk("I/O scheduler %s not found\n", chosen_elevator); + + 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); -- cgit v1.2.3-59-g8ed1b