git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
init
/
do_mounts.c
diff --git
a/init/do_mounts.c
b/init/do_mounts.c
index
b7570c0
..
dc1ec08
100644
(file)
--- a/
init/do_mounts.c
+++ b/
init/do_mounts.c
@@
-7,6
+7,8
@@
#include <linux/root_dev.h>
#include <linux/security.h>
#include <linux/delay.h>
#include <linux/root_dev.h>
#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>
#include <linux/nfs_fs.h>
#include <linux/nfs_fs_sb.h>
@@
-18,15
+20,12
@@
extern int get_filesystem_list(char * buf);
int __initdata rd_doload; /* 1 = load RAM disk, 0 = don't load */
int __initdata rd_doload; /* 1 = load RAM disk, 0 = don't load */
-int root_mountflags = MS_RDONLY | MS_
VERBOSE
;
+int root_mountflags = MS_RDONLY | MS_
SILENT
;
char * __initdata root_device_name;
static char __initdata saved_root_name[64];
char * __initdata root_device_name;
static char __initdata saved_root_name[64];
-/* this is initialized in init/main.c */
dev_t ROOT_DEV;
dev_t ROOT_DEV;
-EXPORT_SYMBOL(ROOT_DEV);
-
static int __init load_ramdisk(char *str)
{
rd_doload = simple_strtol(str,NULL,0) & 3;
static int __init load_ramdisk(char *str)
{
rd_doload = simple_strtol(str,NULL,0) & 3;
@@
-128,10
+127,10
@@
fail:
* used when disk name of partitioned disk ends on a digit.
*
* If name doesn't have fall into the categories above, we return 0.
* used when disk name of partitioned disk ends on a digit.
*
* If name doesn't have fall into the categories above, we return 0.
- *
Driver
fs is used to check if something is a disk name - it has
+ *
Sys
fs is used to check if something is a disk name - it has
* all known disks under bus/block/devices. If the disk name
* all known disks under bus/block/devices. If the disk name
- * contains slashes, name of
driver
fs node has them replaced with
- * bangs. try_name() does the actual checks, assuming that
driver
fs
+ * contains slashes, name of
sys
fs node has them replaced with
+ * bangs. try_name() does the actual checks, assuming that
sys
fs
* is mounted on rootfs /sys.
*/
* is mounted on rootfs /sys.
*/
@@
-286,7
+285,11
@@
void __init mount_block_root(char *name, int flags)
{
char *fs_names = __getname();
char *p;
{
char *fs_names = __getname();
char *p;
+#ifdef CONFIG_BLOCK
char b[BDEVNAME_SIZE];
char b[BDEVNAME_SIZE];
+#else
+ const char *b = name;
+#endif
get_fs_names(fs_names);
retry:
get_fs_names(fs_names);
retry:
@@
-305,14
+308,24
@@
retry:
* Allow the user to distinguish between failed sys_open
* and bad superblock on root device.
*/
* Allow the user to distinguish between failed sys_open
* 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",
root_device_name, b);
printk("Please append a correct \"root=\" boot option\n");
panic("VFS: Unable to mount root fs on %s", b);
}
printk("VFS: Cannot open root device \"%s\" or %s\n",
root_device_name, b);
printk("Please append a correct \"root=\" boot option\n");
panic("VFS: Unable to mount root fs on %s", b);
}
- panic("VFS: Unable to mount root fs on %s", __bdevname(ROOT_DEV, b));
+
+ printk("No filesystem could mount root, tried: ");
+ for (p = fs_names; *p; p += strlen(p)+1)
+ printk(" %s", p);
+ printk("\n");
+#ifdef CONFIG_BLOCK
+ __bdevname(ROOT_DEV, b);
+#endif
+ panic("VFS: Unable to mount root fs on %s", b);
out:
putname(fs_names);
}
out:
putname(fs_names);
}
@@
-322,7
+335,7
@@
static int __init mount_nfs_root(void)
{
void *data = nfs_root_data();
{
void *data = nfs_root_data();
- create_dev("/dev/root", ROOT_DEV
, NULL
);
+ create_dev("/dev/root", ROOT_DEV);
if (data &&
do_mount_root("/dev/root", "nfs", root_mountflags, data) == 0)
return 1;
if (data &&
do_mount_root("/dev/root", "nfs", root_mountflags, data) == 0)
return 1;
@@
-383,8
+396,10
@@
void __init mount_root(void)
change_floppy("root floppy");
}
#endif
change_floppy("root floppy");
}
#endif
- create_dev("/dev/root", ROOT_DEV, root_device_name);
+#ifdef CONFIG_BLOCK
+ create_dev("/dev/root", ROOT_DEV);
mount_block_root("/dev/root", root_mountflags);
mount_block_root("/dev/root", root_mountflags);
+#endif
}
/*
}
/*
@@
-394,18
+409,24
@@
void __init prepare_namespace(void)
{
int is_floppy;
{
int is_floppy;
- mount_devfs();
-
if (root_delay) {
printk(KERN_INFO "Waiting %dsec before mounting root device...\n",
root_delay);
ssleep(root_delay);
}
if (root_delay) {
printk(KERN_INFO "Waiting %dsec before mounting root device...\n",
root_delay);
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]) {
root_device_name = saved_root_name;
md_run_setup();
if (saved_root_name[0]) {
root_device_name = saved_root_name;
+ if (!strncmp(root_device_name, "mtd", 3)) {
+ mount_block_root(root_device_name, root_mountflags);
+ goto out;
+ }
ROOT_DEV = name_to_dev_t(root_device_name);
if (strncmp(root_device_name, "/dev/", 5) == 0)
root_device_name += 5;
ROOT_DEV = name_to_dev_t(root_device_name);
if (strncmp(root_device_name, "/dev/", 5) == 0)
root_device_name += 5;
@@
-421,10
+442,8
@@
void __init prepare_namespace(void)
mount_root();
out:
mount_root();
out:
- umount_devfs("/dev");
sys_mount(".", "/", NULL, MS_MOVE, NULL);
sys_chroot(".");
security_sb_post_mountroot();
sys_mount(".", "/", NULL, MS_MOVE, NULL);
sys_chroot(".");
security_sb_post_mountroot();
- mount_devfs_fs ();
}
}