Commit 6e19eded3684dc184181093af3bff2ff440f5b53
Committed by
Linus Torvalds
1 parent
16203a7a94
Exists in
smarc-imx_3.14.28_1.0.0_ga
and in
1 other branch
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>
Showing 2 changed files with 15 additions and 4 deletions Side-by-side Diff
Documentation/filesystems/ramfs-rootfs-initramfs.txt
... | ... | @@ -79,6 +79,10 @@ |
79 | 79 | Most systems just mount another filesystem over rootfs and ignore it. The |
80 | 80 | amount of space an empty instance of ramfs takes up is tiny. |
81 | 81 | |
82 | +If CONFIG_TMPFS is enabled, rootfs will use tmpfs instead of ramfs by | |
83 | +default. To force ramfs, add "rootfstype=ramfs" to the kernel command | |
84 | +line. | |
85 | + | |
82 | 86 | What is initramfs? |
83 | 87 | ------------------ |
84 | 88 |
init/do_mounts.c
... | ... | @@ -591,16 +591,20 @@ |
591 | 591 | sys_chroot("."); |
592 | 592 | } |
593 | 593 | |
594 | +static bool is_tmpfs; | |
594 | 595 | static struct dentry *rootfs_mount(struct file_system_type *fs_type, |
595 | 596 | int flags, const char *dev_name, void *data) |
596 | 597 | { |
597 | 598 | static unsigned long once; |
599 | + void *fill = ramfs_fill_super; | |
598 | 600 | |
599 | 601 | if (test_and_set_bit(0, &once)) |
600 | 602 | return ERR_PTR(-ENODEV); |
601 | 603 | |
602 | - return mount_nodev(fs_type, flags, data, | |
603 | - IS_ENABLED(CONFIG_TMPFS) ? shmem_fill_super : ramfs_fill_super); | |
604 | + if (IS_ENABLED(CONFIG_TMPFS) && is_tmpfs) | |
605 | + fill = shmem_fill_super; | |
606 | + | |
607 | + return mount_nodev(fs_type, flags, data, fill); | |
604 | 608 | } |
605 | 609 | |
606 | 610 | static struct file_system_type rootfs_fs_type = { |
607 | 611 | |
608 | 612 | |
... | ... | @@ -616,10 +620,13 @@ |
616 | 620 | if (err) |
617 | 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 | 625 | err = shmem_init(); |
621 | - else | |
626 | + is_tmpfs = true; | |
627 | + } else { | |
622 | 628 | err = init_ramfs_fs(); |
629 | + } | |
623 | 630 | |
624 | 631 | if (err) |
625 | 632 | unregister_filesystem(&rootfs_fs_type); |