
From: Daniel Drake <dsd@gentoo.org>

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 <dsd@gentoo.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 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 <linux/suspend.h>
 #include <linux/root_dev.h>
 #include <linux/security.h>
+#include <linux/delay.h>
 
 #include <linux/nfs_fs.h>
 #include <linux/nfs_fs_sb.h>
@@ -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]) {
_
