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).

[[email protected]: coding-style fixes]
Signed-off-by: Rob Landley <[email protected]>
Cc: Jeff Layton <[email protected]>
Cc: Jens Axboe <[email protected]>
Cc: Stephen Warren <[email protected]>
Cc: Rusty Russell <[email protected]>
Cc: Jim Cromie <[email protected]>
Cc: Sam Ravnborg <[email protected]>
Cc: Greg Kroah-Hartman <[email protected]>
Cc: "Eric W. Biederman" <[email protected]>
Cc: Alexander Viro <[email protected]>
Cc: "H. Peter Anvin" <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • 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.