fix prerequisites due to libc changes
[buildroot.git] / toolchain / kernel-headers / linux-2.6.21.5-006-wait-for-async-scanned-block-devices.patch
blob910b43ad9b9472b8b7bf473437d10541704f742a
1 diff --git a/init/do_mounts.c b/init/do_mounts.c
2 index 46fe407..efc134c 100644
3 --- a/init/do_mounts.c
4 +++ b/init/do_mounts.c
5 @@ -25,6 +25,7 @@ int __initdata rd_doload; /* 1 = load RAM disk, 0 = don't load */
6 int root_mountflags = MS_RDONLY | MS_SILENT;
7 char * __initdata root_device_name;
8 static char __initdata saved_root_name[64];
9 +int __initdata root_wait;
11 dev_t ROOT_DEV;
13 @@ -216,6 +217,14 @@ static int __init root_dev_setup(char *line)
15 __setup("root=", root_dev_setup);
17 +static int __init rootwait_setup(char *line)
19 + root_wait = simple_strtol(line,NULL,0);
20 + return 1;
23 +__setup("rootwait=", rootwait_setup);
25 static char * __initdata root_mount_data;
26 static int __init root_data_setup(char *str)
28 @@ -438,11 +447,24 @@ void __init prepare_namespace(void)
29 root_device_name += 5;
32 - is_floppy = MAJOR(ROOT_DEV) == FLOPPY_MAJOR;
34 if (initrd_load())
35 goto out;
37 + /* wait for any asynchronous scanning to complete */
38 + if ((ROOT_DEV == 0) && root_wait) {
39 + printk(KERN_INFO "Waiting for root device %s...\n",
40 + saved_root_name);
41 + do {
42 + while (driver_probe_done() != 0)
43 + msleep(100);
44 + ROOT_DEV = name_to_dev_t(saved_root_name);
45 + if (ROOT_DEV == 0)
46 + msleep(100);
47 + } while (ROOT_DEV == 0);
48 + }
50 + is_floppy = MAJOR(ROOT_DEV) == FLOPPY_MAJOR;
52 if (is_floppy && rd_doload && rd_load_disk(0))
53 ROOT_DEV = Root_RAM0;