12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- 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;
-
|