]> pilppa.com Git - linux-2.6-omap-h63xx.git/commitdiff
Sync with mainline: init/do_mounts.c
authorTony Lindgren <tony@atomide.com>
Mon, 23 Oct 2006 17:59:27 +0000 (20:59 +0300)
committerTony Lindgren <tony@atomide.com>
Mon, 23 Oct 2006 17:59:27 +0000 (20:59 +0300)
File init/do_mounts.c should always be in sync with mainline.

See rootdelay= kernel parameter for mounting USB drive as root.

init/do_mounts.c

index 32892a86afc479701bf80b269319e4d96f9dfbd3..dc1ec0803ef9b93b76c27b9db3a9d3e741f98280 100644 (file)
@@ -8,6 +8,7 @@
 #include <linux/security.h>
 #include <linux/delay.h>
 #include <linux/mount.h>
+#include <linux/device.h>
 
 #include <linux/nfs_fs.h>
 #include <linux/nfs_fs_sb.h>
@@ -284,8 +285,11 @@ void __init mount_block_root(char *name, int flags)
 {
        char *fs_names = __getname();
        char *p;
+#ifdef CONFIG_BLOCK
        char b[BDEVNAME_SIZE];
-       int i = 0;
+#else
+       const char *b = name;
+#endif
 
        get_fs_names(fs_names);
 retry:
@@ -300,19 +304,13 @@ retry:
                        case -EINVAL:
                                continue;
                }
-
-               printk("VFS: No root yet, retrying to mount root on %s (%s)\n",
-                      root_device_name, __bdevname(ROOT_DEV, b));
-               current->state = TASK_INTERRUPTIBLE;
-               schedule_timeout(10 * HZ);
-               if (i++ < 5)
-                       goto retry;
-
                /*
                 * Allow the user to distinguish between failed sys_open
                 * and bad superblock on root device.
                 */
+#ifdef CONFIG_BLOCK
                __bdevname(ROOT_DEV, b);
+#endif
                printk("VFS: Cannot open root device \"%s\" or %s\n",
                                root_device_name, b);
                printk("Please append a correct \"root=\" boot option\n");
@@ -324,7 +322,10 @@ retry:
        for (p = fs_names; *p; p += strlen(p)+1)
                printk(" %s", p);
        printk("\n");
-       panic("VFS: Unable to mount root fs on %s", __bdevname(ROOT_DEV, b));
+#ifdef CONFIG_BLOCK
+       __bdevname(ROOT_DEV, b);
+#endif
+       panic("VFS: Unable to mount root fs on %s", b);
 out:
        putname(fs_names);
 }
@@ -395,8 +396,10 @@ void __init mount_root(void)
                        change_floppy("root floppy");
        }
 #endif
+#ifdef CONFIG_BLOCK
        create_dev("/dev/root", ROOT_DEV);
        mount_block_root("/dev/root", root_mountflags);
+#endif
 }
 
 /*
@@ -412,6 +415,10 @@ void __init prepare_namespace(void)
                ssleep(root_delay);
        }
 
+       /* wait for the known devices to complete their probing */
+       while (driver_probe_done() != 0)
+               msleep(100);
+
        md_run_setup();
 
        if (saved_root_name[0]) {