Skip to content

Commit

Permalink
initmpfs: use initramfs if rootfstype= or root= specified
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
landley authored and torvalds committed Sep 11, 2013
1 parent 16203a7 commit 6e19ede
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 4 deletions.
4 changes: 4 additions & 0 deletions Documentation/filesystems/ramfs-rootfs-initramfs.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
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?
------------------

Expand Down
15 changes: 11 additions & 4 deletions init/do_mounts.c
Original file line number Diff line number Diff line change
Expand Up @@ -591,16 +591,20 @@ void __init prepare_namespace(void)
sys_chroot(".");
}

static bool is_tmpfs;
static struct dentry *rootfs_mount(struct file_system_type *fs_type,
int flags, const char *dev_name, void *data)
{
static unsigned long once;
void *fill = ramfs_fill_super;

if (test_and_set_bit(0, &once))
return ERR_PTR(-ENODEV);

return mount_nodev(fs_type, flags, data,
IS_ENABLED(CONFIG_TMPFS) ? shmem_fill_super : ramfs_fill_super);
if (IS_ENABLED(CONFIG_TMPFS) && is_tmpfs)
fill = shmem_fill_super;

return mount_nodev(fs_type, flags, data, fill);
}

static struct file_system_type rootfs_fs_type = {
Expand All @@ -616,10 +620,13 @@ int __init init_rootfs(void)
if (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();
else
is_tmpfs = true;
} else {
err = init_ramfs_fs();
}

if (err)
unregister_filesystem(&rootfs_fs_type);
Expand Down

0 comments on commit 6e19ede

Please sign in to comment.