Commit 28c6715d authored by Tony Lindgren's avatar Tony Lindgren

Sync with mainline: init/do_mounts.c

File init/do_mounts.c should always be in sync with mainline.

See rootdelay= kernel parameter for mounting USB drive as root.
parent b53d86bd
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <linux/security.h> #include <linux/security.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/mount.h> #include <linux/mount.h>
#include <linux/device.h>
#include <linux/nfs_fs.h> #include <linux/nfs_fs.h>
#include <linux/nfs_fs_sb.h> #include <linux/nfs_fs_sb.h>
...@@ -284,8 +285,11 @@ void __init mount_block_root(char *name, int flags) ...@@ -284,8 +285,11 @@ void __init mount_block_root(char *name, int flags)
{ {
char *fs_names = __getname(); char *fs_names = __getname();
char *p; char *p;
#ifdef CONFIG_BLOCK
char b[BDEVNAME_SIZE]; char b[BDEVNAME_SIZE];
int i = 0; #else
const char *b = name;
#endif
get_fs_names(fs_names); get_fs_names(fs_names);
retry: retry:
...@@ -300,19 +304,13 @@ retry: ...@@ -300,19 +304,13 @@ retry:
case -EINVAL: case -EINVAL:
continue; 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 * Allow the user to distinguish between failed sys_open
* and bad superblock on root device. * and bad superblock on root device.
*/ */
#ifdef CONFIG_BLOCK
__bdevname(ROOT_DEV, b); __bdevname(ROOT_DEV, b);
#endif
printk("VFS: Cannot open root device \"%s\" or %s\n", printk("VFS: Cannot open root device \"%s\" or %s\n",
root_device_name, b); root_device_name, b);
printk("Please append a correct \"root=\" boot option\n"); printk("Please append a correct \"root=\" boot option\n");
...@@ -324,7 +322,10 @@ retry: ...@@ -324,7 +322,10 @@ retry:
for (p = fs_names; *p; p += strlen(p)+1) for (p = fs_names; *p; p += strlen(p)+1)
printk(" %s", p); printk(" %s", p);
printk("\n"); 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: out:
putname(fs_names); putname(fs_names);
} }
...@@ -395,8 +396,10 @@ void __init mount_root(void) ...@@ -395,8 +396,10 @@ void __init mount_root(void)
change_floppy("root floppy"); change_floppy("root floppy");
} }
#endif #endif
#ifdef CONFIG_BLOCK
create_dev("/dev/root", ROOT_DEV); create_dev("/dev/root", ROOT_DEV);
mount_block_root("/dev/root", root_mountflags); mount_block_root("/dev/root", root_mountflags);
#endif
} }
/* /*
...@@ -412,6 +415,10 @@ void __init prepare_namespace(void) ...@@ -412,6 +415,10 @@ void __init prepare_namespace(void)
ssleep(root_delay); ssleep(root_delay);
} }
/* wait for the known devices to complete their probing */
while (driver_probe_done() != 0)
msleep(100);
md_run_setup(); md_run_setup();
if (saved_root_name[0]) { if (saved_root_name[0]) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment