summaryrefslogtreecommitdiffstats
path: root/toolchain/kernel-headers/linux-2.6.21.5-006-wait-for-async-scanned-block-devices.patch
diff options
context:
space:
mode:
Diffstat (limited to 'toolchain/kernel-headers/linux-2.6.21.5-006-wait-for-async-scanned-block-devices.patch')
-rw-r--r--toolchain/kernel-headers/linux-2.6.21.5-006-wait-for-async-scanned-block-devices.patch55
1 files changed, 55 insertions, 0 deletions
diff --git a/toolchain/kernel-headers/linux-2.6.21.5-006-wait-for-async-scanned-block-devices.patch b/toolchain/kernel-headers/linux-2.6.21.5-006-wait-for-async-scanned-block-devices.patch
new file mode 100644
index 000000000..910b43ad9
--- /dev/null
+++ b/toolchain/kernel-headers/linux-2.6.21.5-006-wait-for-async-scanned-block-devices.patch
@@ -0,0 +1,55 @@
+diff --git a/init/do_mounts.c b/init/do_mounts.c
+index 46fe407..efc134c 100644
+--- a/init/do_mounts.c
++++ b/init/do_mounts.c
+@@ -25,6 +25,7 @@ int __initdata rd_doload; /* 1 = load RAM disk, 0 = don't load */
+ int root_mountflags = MS_RDONLY | MS_SILENT;
+ char * __initdata root_device_name;
+ static char __initdata saved_root_name[64];
++int __initdata root_wait;
+
+ dev_t ROOT_DEV;
+
+@@ -216,6 +217,14 @@ static int __init root_dev_setup(char *line)
+
+ __setup("root=", root_dev_setup);
+
++static int __init rootwait_setup(char *line)
++{
++ root_wait = simple_strtol(line,NULL,0);
++ return 1;
++}
++
++__setup("rootwait=", rootwait_setup);
++
+ static char * __initdata root_mount_data;
+ static int __init root_data_setup(char *str)
+ {
+@@ -438,11 +447,24 @@ void __init prepare_namespace(void)
+ root_device_name += 5;
+ }
+
+- is_floppy = MAJOR(ROOT_DEV) == FLOPPY_MAJOR;
+-
+ if (initrd_load())
+ goto out;
+
++ /* wait for any asynchronous scanning to complete */
++ if ((ROOT_DEV == 0) && root_wait) {
++ printk(KERN_INFO "Waiting for root device %s...\n",
++ saved_root_name);
++ do {
++ while (driver_probe_done() != 0)
++ msleep(100);
++ ROOT_DEV = name_to_dev_t(saved_root_name);
++ if (ROOT_DEV == 0)
++ msleep(100);
++ } while (ROOT_DEV == 0);
++ }
++
++ is_floppy = MAJOR(ROOT_DEV) == FLOPPY_MAJOR;
++
+ if (is_floppy && rd_doload && rd_load_disk(0))
+ ROOT_DEV = Root_RAM0;
+
+