Skip to contentSkip to conversation

Pramfs: Mounting as root filesystem

PATCH In review Marco 4 participants 6 messages Jun 13, 2009 – Jun 14, 2009 VFS

lore
Share & tools
lore

Marco

author
#0 lore raw

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
diff -uprN linux-2.6.30-orig/init/do_mounts.c linux-2.6.30/init/do_mounts.c
@@ -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())
#1 lore raw

init/do_mounts.c void __init change_floppy(char *fmt, ... · line 353

Quoted 11 lines · Marco

void __init mount_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 <><
author
#2 lore raw
Quoted 16 lines · Arnd Bergmann

init/do_mounts.c void __init change_floppy(char *fmt, ... · line 353

Quoted 11 lines · Marco

void __init mount_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.

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

#3 lore raw
Quoted 6 lines · Marco

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?

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
author
#4 lore raw
Quoted 10 lines · David Woodhouse
Quoted 5 lines · Marco

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?

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

#5 lore raw
Quoted 10 lines · David Woodhouse
Quoted 5 lines · Marco

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?

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;
	}