Pramfs: Mounting as root filesystem
PATCH 4/14 Pramfs: Mounting as root filesystem
From: Marco Stornelli <[email protected]>
Pramfs can be used even as root filesystem.
---
init/do_mounts.c +20 -0
@@ -299,6 +299,17 @@ static int __init mount_nfs_root(void) }#endif +#ifdef CONFIG_ROOT_PRAMFS +static int __init mount_pramfs_root (void ) +{ +create_dev ("/dev/root" ,ROOT_DEV ); +if (do_mount_root ("/dev/root" ,"pramfs" , + root_mountflags, root_mount_data) ==0 ) +return 1 ; +return 0 ; +} +#endif +#if defined(CONFIG_BLK_DEV_RAM ) || defined(CONFIG_BLK_DEV_FD )void __init change_floppy (char *fmt, ...) {
@@ -331,6 +342,15 @@ void __init change_floppy(char *fmt, ...void __init mount_root (void ) { +#ifdef CONFIG_ROOT_PRAMFS +if (MAJOR (ROOT_DEV ) ==MEM_MAJOR ) { +if (mount_pramfs_root ()) +return ; + +printk (KERN_ERR "VFS: Unable to mount root fs via PRAMFS, trying floppy.\n" ); +ROOT_DEV = Root_FD0; + } +#endif #ifdef CONFIG_ROOT_NFS if (MAJOR (ROOT_DEV ) ==UNNAMED_MAJOR ) {if (mount_nfs_root ())
init/do_mounts.c void __init change_floppy(char *fmt, ... · line 353
Quoted 11 lines · Marco
void
__initmount_root(void)
{init/do_mounts.c +9
-0+#ifdef CONFIG_ROOT_PRAMFS +if (MAJOR (ROOT_DEV ) ==MEM_MAJOR ) { +if (mount_pramfs_root ()) +return ; + +printk (KERN_ERR "VFS: Unable to mount root fs via PRAMFS, trying floppy.\n" ); +ROOT_DEV = Root_FD0; + } +#endif
AFAICT, this will prevent booting from /dev/ram0 with a regular file system, because that also uses MAJOR(ROOT_DEV) == 1.
Arnd <><
Quoted 16 lines · Arnd Bergmann
init/do_mounts.c void __init change_floppy(char *fmt, ... · line 353
Quoted 11 lines · Marco
void
__initmount_root(void)
{init/do_mounts.c +9
-0+#ifdef CONFIG_ROOT_PRAMFS +if (MAJOR (ROOT_DEV ) ==MEM_MAJOR ) { +if (mount_pramfs_root ()) +return ; + +printk (KERN_ERR "VFS: Unable to mount root fs via PRAMFS, trying floppy.\n" ); +ROOT_DEV = Root_FD0; + } +#endif AFAICT, this will prevent booting from
/dev/ram0with a regular file system, because that also usesMAJOR(ROOT_DEV)== 1.
Quoted 2 lines
Arnd <><
Mmm...MEM_MAJOR and RAMDISK_MAJOR have the same value and pramfs works in memory. We could simply use /dev/null (there was an error in the submitted kconfig description, my intention was to use /dev/mem). In that case I can use UNNAMED_MAJOR. PRAMFS root option is not enabled if it's already enabled the NFS one. What do you think?
Marco
Quoted 6 lines · Marco
Mmm...MEM_MAJOR and
RAMDISK_MAJORhave the same value and pramfs works in memory. We could simply use/dev/null(there was an error in the submitted kconfig description, my intention was to use/dev/mem). In that case I can useUNNAMED_MAJOR. PRAMFS root option is not enabled if it's already enabled the NFS one. What do you think?
Why use a major number at all? See how we handle mtd and ubi devices in prepare_namespace() -- can't you do something similar?
Signature · 2 lines
David Woodhouse Open Source Technology Centre [email protected] Intel Corporation
Quoted 10 lines · David Woodhouse
Quoted 5 lines · Marco
Mmm...MEM_MAJOR and
RAMDISK_MAJORhave the same value and pramfs works in memory. We could simply use/dev/null(there was an error in the submitted kconfig description, my intention was to use/dev/mem). In that case I can useUNNAMED_MAJOR. PRAMFS root option is not enabled if it's already enabled the NFS one. What do you think?Why use a major number at all? See how we handle mtd and ubi devices in
prepare_namespace()-- can't you do something similar?
I can look at it.
Marco
Quoted 10 lines · David Woodhouse
Quoted 5 lines · Marco
Mmm...MEM_MAJOR and
RAMDISK_MAJORhave the same value and pramfs works in memory. We could simply use/dev/null(there was an error in the submitted kconfig description, my intention was to use/dev/mem). In that case I can useUNNAMED_MAJOR. PRAMFS root option is not enabled if it's already enabled the NFS one. What do you think?Why use a major number at all? See how we handle mtd and ubi devices in
prepare_namespace()-- can't you do something similar?
Do you suggest me something similar? Why not. I though that mtd and ubi were only special cases.
if (saved_root_name[0]) {
root_device_name = saved_root_name;
if (!strncmp(root_device_name, "mtd", 3) ||
!strncmp(root_device_name, "ubi", 3) ||
--------> !strncmp(root_device_name, "pram", 4)) {
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;
}