aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2013-09-11 17:26:13 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-09-11 18:59:38 -0400
commit6e19eded3684dc184181093af3bff2ff440f5b53 (patch)
treef88bf08f0897703bb0d07020e4f921494bd7a434
parent16203a7a9422315bc929461503e3a046459ea5ff (diff)
initmpfs: use initramfs if rootfstype= or root= specified
Command line option rootfstype=ramfs to obtain old initramfs behavior, and use ramfs instead of tmpfs for stub when root= defined (for cosmetic reasons). [akpm@linux-foundation.org: coding-style fixes] Signed-off-by: Rob Landley <rob@landley.net> Cc: Jeff Layton <jlayton@redhat.com> Cc: Jens Axboe <axboe@kernel.dk> Cc: Stephen Warren <swarren@nvidia.com> Cc: Rusty Russell <rusty@rustcorp.com.au> Cc: Jim Cromie <jim.cromie@gmail.com> Cc: Sam Ravnborg <sam@ravnborg.org> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: Alexander Viro <viro@zeniv.linux.org.uk> Cc: "H. Peter Anvin" <hpa@zytor.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--Documentation/filesystems/ramfs-rootfs-initramfs.txt4
-rw-r--r--init/do_mounts.c15
2 files changed, 15 insertions, 4 deletions
diff --git a/Documentation/filesystems/ramfs-rootfs-initramfs.txt b/Documentation/filesystems/ramfs-rootfs-initramfs.txt
index 59b4a0962e0f..b176928e6963 100644
--- a/Documentation/filesystems/ramfs-rootfs-initramfs.txt
+++ b/Documentation/filesystems/ramfs-rootfs-initramfs.txt
@@ -79,6 +79,10 @@ to just make sure certain lists can't become empty.
79Most systems just mount another filesystem over rootfs and ignore it. The 79Most systems just mount another filesystem over rootfs and ignore it. The
80amount of space an empty instance of ramfs takes up is tiny. 80amount of space an empty instance of ramfs takes up is tiny.
81 81
82If CONFIG_TMPFS is enabled, rootfs will use tmpfs instead of ramfs by
83default. To force ramfs, add "rootfstype=ramfs" to the kernel command
84line.
85
82What is initramfs? 86What is initramfs?
83------------------ 87------------------
84 88
diff --git a/init/do_mounts.c b/init/do_mounts.c
index e27908b949d4..a51cddc2ff8c 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
@@ -591,16 +591,20 @@ out:
591 sys_chroot("."); 591 sys_chroot(".");
592} 592}
593 593
594static bool is_tmpfs;
594static struct dentry *rootfs_mount(struct file_system_type *fs_type, 595static struct dentry *rootfs_mount(struct file_system_type *fs_type,
595 int flags, const char *dev_name, void *data) 596 int flags, const char *dev_name, void *data)
596{ 597{
597 static unsigned long once; 598 static unsigned long once;
599 void *fill = ramfs_fill_super;
598 600
599 if (test_and_set_bit(0, &once)) 601 if (test_and_set_bit(0, &once))
600 return ERR_PTR(-ENODEV); 602 return ERR_PTR(-ENODEV);
601 603
602 return mount_nodev(fs_type, flags, data, 604 if (IS_ENABLED(CONFIG_TMPFS) && is_tmpfs)
603 IS_ENABLED(CONFIG_TMPFS) ? shmem_fill_super : ramfs_fill_super); 605 fill = shmem_fill_super;
606
607 return mount_nodev(fs_type, flags, data, fill);
604} 608}
605 609
606static struct file_system_type rootfs_fs_type = { 610static struct file_system_type rootfs_fs_type = {
@@ -616,10 +620,13 @@ int __init init_rootfs(void)
616 if (err) 620 if (err)
617 return err; 621 return err;
618 622
619 if (IS_ENABLED(CONFIG_TMPFS)) 623 if (IS_ENABLED(CONFIG_TMPFS) && !saved_root_name[0] &&
624 (!root_fs_names || strstr(root_fs_names, "tmpfs"))) {
620 err = shmem_init(); 625 err = shmem_init();
621 else 626 is_tmpfs = true;
627 } else {
622 err = init_ramfs_fs(); 628 err = init_ramfs_fs();
629 }
623 630
624 if (err) 631 if (err)
625 unregister_filesystem(&rootfs_fs_type); 632 unregister_filesystem(&rootfs_fs_type);