Commit 6e19eded authored by Rob Landley's avatar Rob Landley Committed by Linus Torvalds

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: default avatarRob 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: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 16203a7a
...@@ -79,6 +79,10 @@ to just make sure certain lists can't become empty. ...@@ -79,6 +79,10 @@ to just make sure certain lists can't become empty.
Most systems just mount another filesystem over rootfs and ignore it. The Most systems just mount another filesystem over rootfs and ignore it. The
amount of space an empty instance of ramfs takes up is tiny. amount of space an empty instance of ramfs takes up is tiny.
If CONFIG_TMPFS is enabled, rootfs will use tmpfs instead of ramfs by
default. To force ramfs, add "rootfstype=ramfs" to the kernel command
line.
What is initramfs? What is initramfs?
------------------ ------------------
......
...@@ -591,16 +591,20 @@ void __init prepare_namespace(void) ...@@ -591,16 +591,20 @@ void __init prepare_namespace(void)
sys_chroot("."); sys_chroot(".");
} }
static bool is_tmpfs;
static struct dentry *rootfs_mount(struct file_system_type *fs_type, static struct dentry *rootfs_mount(struct file_system_type *fs_type,
int flags, const char *dev_name, void *data) int flags, const char *dev_name, void *data)
{ {
static unsigned long once; static unsigned long once;
void *fill = ramfs_fill_super;
if (test_and_set_bit(0, &once)) if (test_and_set_bit(0, &once))
return ERR_PTR(-ENODEV); return ERR_PTR(-ENODEV);
return mount_nodev(fs_type, flags, data, if (IS_ENABLED(CONFIG_TMPFS) && is_tmpfs)
IS_ENABLED(CONFIG_TMPFS) ? shmem_fill_super : ramfs_fill_super); fill = shmem_fill_super;
return mount_nodev(fs_type, flags, data, fill);
} }
static struct file_system_type rootfs_fs_type = { static struct file_system_type rootfs_fs_type = {
...@@ -616,10 +620,13 @@ int __init init_rootfs(void) ...@@ -616,10 +620,13 @@ int __init init_rootfs(void)
if (err) if (err)
return err; return err;
if (IS_ENABLED(CONFIG_TMPFS)) if (IS_ENABLED(CONFIG_TMPFS) && !saved_root_name[0] &&
(!root_fs_names || strstr(root_fs_names, "tmpfs"))) {
err = shmem_init(); err = shmem_init();
else is_tmpfs = true;
} else {
err = init_ramfs_fs(); err = init_ramfs_fs();
}
if (err) if (err)
unregister_filesystem(&rootfs_fs_type); unregister_filesystem(&rootfs_fs_type);
......
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