From: Daniel Drake Adds a boot parameter which can be used to specify a delay (in seconds) before the root device is decoded/discovered/mounted. Example usage for 10 second delay: rootdelay=10 Useful for usb-storage devices which no longer make their partitions immediately available, and for other storage devices which require some "spin-up" time. Signed-off-by: Daniel Drake Signed-off-by: Andrew Morton --- 25-akpm/Documentation/kernel-parameters.txt | 3 +++ 25-akpm/init/do_mounts.c | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff -puN Documentation/kernel-parameters.txt~configurable-delay-before-mounting-root-device Documentation/kernel-parameters.txt --- 25/Documentation/kernel-parameters.txt~configurable-delay-before-mounting-root-device 2005-01-22 23:33:13.038162280 -0800 +++ 25-akpm/Documentation/kernel-parameters.txt 2005-01-22 23:33:13.043161520 -0800 @@ -1117,6 +1117,9 @@ running once the system is up. root= [KNL] Root filesystem + rootdelay= [KNL] Delay (in seconds) to pause before attempting to + mount the root filesystem + rootflags= [KNL] Set root filesystem mount option string rootfstype= [KNL] Set root filesystem type diff -puN init/do_mounts.c~configurable-delay-before-mounting-root-device init/do_mounts.c --- 25/init/do_mounts.c~configurable-delay-before-mounting-root-device 2005-01-22 23:33:13.039162128 -0800 +++ 25-akpm/init/do_mounts.c 2005-01-22 23:33:13.044161368 -0800 @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -228,8 +229,16 @@ static int __init fs_names_setup(char *s return 1; } +static unsigned int __initdata root_delay; +static int __init root_delay_setup(char *str) +{ + root_delay = simple_strtoul(str, NULL, 0); + return 1; +} + __setup("rootflags=", root_data_setup); __setup("rootfstype=", fs_names_setup); +__setup("rootdelay=", root_delay_setup); static void __init get_fs_names(char *page) { @@ -387,6 +396,12 @@ void __init prepare_namespace(void) mount_devfs(); + if (root_delay) { + printk(KERN_INFO "Waiting %dsec before mounting root device...\n", + root_delay); + ssleep(root_delay); + } + md_run_setup(); if (saved_root_name[0]) { _