From: Nate Diller Add a kconfig submenu to select the default I/O scheduler, in case anticipatory is not compiled in or another default is preferred. Also, since no-op is always available, we should use it whenever the selected default is not. Signed-off-by: Nate Diller Acked-by: Jens Axboe Signed-off-by: Andrew Morton --- drivers/block/Kconfig.iosched | 28 ++++++++++++++++++++++++++++ drivers/block/elevator.c | 24 +++++++++--------------- 2 files changed, 37 insertions(+), 15 deletions(-) diff -puN drivers/block/elevator.c~block-cleanups-add-kconfig-default-iosched-submenu drivers/block/elevator.c --- devel/drivers/block/elevator.c~block-cleanups-add-kconfig-default-iosched-submenu 2005-09-27 23:54:52.000000000 -0700 +++ devel-akpm/drivers/block/elevator.c 2005-09-27 23:55:59.000000000 -0700 @@ -154,22 +154,16 @@ static char chosen_elevator[16]; static void elevator_setup_default(void) { /* - * check if default is set and exists - */ - if (chosen_elevator[0] && elevator_find(chosen_elevator)) - return; + * If default has not been set, use the compiled-in selection. + */ + if (!chosen_elevator[0]) + strcpy(chosen_elevator, CONFIG_DEFAULT_IOSCHED); -#if defined(CONFIG_IOSCHED_AS) - strcpy(chosen_elevator, "anticipatory"); -#elif defined(CONFIG_IOSCHED_DEADLINE) - strcpy(chosen_elevator, "deadline"); -#elif defined(CONFIG_IOSCHED_CFQ) - strcpy(chosen_elevator, "cfq"); -#elif defined(CONFIG_IOSCHED_NOOP) - strcpy(chosen_elevator, "noop"); -#else -#error "You must build at least 1 IO scheduler into the kernel" -#endif + /* + * If the given scheduler is not available, fall back to no-op. + */ + if (!elevator_find(chosen_elevator)) + strcpy(chosen_elevator, "noop"); } static int __init elevator_setup(char *str) diff -puN drivers/block/Kconfig.iosched~block-cleanups-add-kconfig-default-iosched-submenu drivers/block/Kconfig.iosched --- devel/drivers/block/Kconfig.iosched~block-cleanups-add-kconfig-default-iosched-submenu 2005-09-27 23:54:52.000000000 -0700 +++ devel-akpm/drivers/block/Kconfig.iosched 2005-09-27 23:56:35.000000000 -0700 @@ -38,4 +38,32 @@ config IOSCHED_CFQ among all processes in the system. It should provide a fair working environment, suitable for desktop systems. +choice + prompt "Default I/O scheduler" + default DEFAULT_AS + help + Select the I/O scheduler which will be used by default for all + block devices. + + config DEFAULT_AS + bool "Anticipatory" if IOSCHED_AS + + config DEFAULT_DEADLINE + bool "Deadline" if IOSCHED_DEADLINE + + config DEFAULT_CFQ + bool "CFQ" if IOSCHED_CFQ + + config DEFAULT_NOOP + bool "No-op" + +endchoice + +config DEFAULT_IOSCHED + string + default "anticipatory" if DEFAULT_AS + default "deadline" if DEFAULT_DEADLINE + default "cfq" if DEFAULT_CFQ + default "noop" if DEFAULT_NOOP + endmenu _