[PATCH] use tmpfs for rootfs - Kernel

This is a discussion on [PATCH] use tmpfs for rootfs - Kernel ; This patch allows chosing tmpfs instead of ramfs for the root filesystem. Having tmpfs is usefull for running systems from RAM, because it does not risk deadlocking the system and possibly allows swapping. Using tmpfs increases the kernel by 10 ...

+ Reply to Thread
Results 1 to 12 of 12

Thread: [PATCH] use tmpfs for rootfs

  1. [PATCH] use tmpfs for rootfs

    This patch allows chosing tmpfs instead of ramfs for the root filesystem.
    Having tmpfs is usefull for running systems from RAM, because it does not
    risk deadlocking the system and possibly allows swapping. Using tmpfs
    increases the kernel by 10 bytes on x86_64.

    Having tmpfs as the root filesystem allows you to get rid of the now unused
    ramfs and free some kernel memory. On my system, that's about 5198 bytes
    compared to having a ramfs root.

    Off cause you can mount tmpfs and move around the data, but this is slower
    (having to copy around the data), more error-prone and it uses more memory.
    Besides that, I don't see the point in explicitely doing the wrong thing
    and then having everybody fix it.


    Signed-off-by: Bodo Eggert <7eggert@gmx.de>

    ---
    Some numbers for my system: (from make and from size vmlinux)

    Setup is 10716 bytes (padded to 10752 bytes).
    System is 2659 kB
    text data bss dec hex filename
    5341667 874212 562992 6778871 676ff7 vmlinux

    having TMPFS_IS_ROOT:
    Setup is 10716 bytes (padded to 10752 bytes).
    System is 2659 kB
    text data bss dec hex filename
    5341677 874212 562992 6778881 677001 vmlinux
    +10

    not having ramfs:
    Setup is 10716 bytes (padded to 10752 bytes).
    System is 2659 kB
    text data bss dec hex filename
    5336733 873948 562992 6773673 675ba9 vmlinux
    -4934 -264


    fs/Kconfig | 21 +++++++++++++++++++++
    fs/ramfs/inode.c | 39 +++++++++++++++++++++------------------
    mm/shmem.c | 26 ++++++++++++++++++++++++++
    3 files changed, 68 insertions(+), 18 deletions(-)


    diff -pruNXdontdiff linux-2.6.27.2-numlock/fs/Kconfig linux-2.6.27.3-tmpfs/fs/Kconfig
    --- linux-2.6.27.2-numlock/fs/Kconfig 2008-10-10 13:18:34.000000000 +0200
    +++ linux-2.6.27.3-tmpfs/fs/Kconfig 2008-10-11 15:42:21.000000000 +0200
    @@ -953,6 +953,27 @@ config TMPFS_POSIX_ACL

    If you don't know what Access Control Lists are, say N.

    +config TMPFS_ROOT
    + bool "Use tmpfs instrad of ramfs for initramfs"
    + depends on TMPFS && SHMEM
    + default n
    + help
    + This replaces the ramfs used for unpacking the cpio images
    + with tmpfs.
    +
    + If unsure, say N
    +
    +config RAMFS
    + bool "Ramfs file system support" if TMPFS_ROOT
    + default y
    + ---help---
    + Ramfs is a file system which keeps all files in RAM. Unlike tmpfs,
    + it cannot be swapped to disk, and it has the risk of deadlocking
    + the system by using all memory.
    +
    + Ramfs is used for booting the system and unpacking the cpio if
    + TMPFS_ROOT is not set.
    +
    config HUGETLBFS
    bool "HugeTLB file system support"
    depends on X86 || IA64 || PPC64 || SPARC64 || (SUPERH && MMU) || \
    diff -pruNXdontdiff linux-2.6.27.2-numlock/fs/ramfs/inode.c linux-2.6.27.3-tmpfs/fs/ramfs/inode.c
    --- linux-2.6.27.2-numlock/fs/ramfs/inode.c 2008-07-13 23:51:29.000000000 +0200
    +++ linux-2.6.27.3-tmpfs/fs/ramfs/inode.c 2008-10-11 15:50:03.000000000 +0200
    @@ -190,6 +190,13 @@ int ramfs_get_sb(struct file_system_type
    return get_sb_nodev(fs_type, flags, data, ramfs_fill_super, mnt);
    }

    +static struct file_system_type ramfs_fs_type = {
    + .name = "ramfs",
    + .get_sb = ramfs_get_sb,
    + .kill_sb = kill_litter_super,
    +};
    +
    +#ifndef CONFIG_TMPFS_ROOT
    static int rootfs_get_sb(struct file_system_type *fs_type,
    int flags, const char *dev_name, void *data, struct vfsmount *mnt)
    {
    @@ -197,30 +204,12 @@ static int rootfs_get_sb(struct file_sys
    mnt);
    }

    -static struct file_system_type ramfs_fs_type = {
    - .name = "ramfs",
    - .get_sb = ramfs_get_sb,
    - .kill_sb = kill_litter_super,
    -};
    static struct file_system_type rootfs_fs_type = {
    .name = "rootfs",
    .get_sb = rootfs_get_sb,
    .kill_sb = kill_litter_super,
    };

    -static int __init init_ramfs_fs(void)
    -{
    - return register_filesystem(&ramfs_fs_type);
    -}
    -
    -static void __exit exit_ramfs_fs(void)
    -{
    - unregister_filesystem(&ramfs_fs_type);
    -}
    -
    -module_init(init_ramfs_fs)
    -module_exit(exit_ramfs_fs)
    -
    int __init init_rootfs(void)
    {
    int err;
    @@ -235,5 +224,19 @@ int __init init_rootfs(void)

    return err;
    }
    +#endif
    +
    +static int __init init_ramfs_fs(void)
    +{
    + return register_filesystem(&ramfs_fs_type);
    +}
    +
    +static void __exit exit_ramfs_fs(void)
    +{
    + unregister_filesystem(&ramfs_fs_type);
    +}
    +
    +module_init(init_ramfs_fs)
    +module_exit(exit_ramfs_fs)

    MODULE_LICENSE("GPL");
    diff -pruNXdontdiff linux-2.6.27.2-numlock/mm/shmem.c linux-2.6.27.3-tmpfs/mm/shmem.c
    --- linux-2.6.27.2-numlock/mm/shmem.c 2008-10-10 13:18:47.000000000 +0200
    +++ linux-2.6.27.3-tmpfs/mm/shmem.c 2008-10-11 16:05:52.000000000 +0200
    @@ -2366,6 +2366,10 @@ static void init_once(void *foo)

    static int init_inodecache(void)
    {
    +#ifdef CONFIG_TMPFS_ROOT
    + if (shmem_inode_cachep)
    + return 0;
    +#endif
    shmem_inode_cachep = kmem_cache_create("shmem_inode_cache",
    sizeof(struct shmem_inode_info),
    0, SLAB_PANIC, init_once);
    @@ -2583,6 +2587,28 @@ put_memory:
    return ERR_PTR(error);
    }

    +#ifdef CONFIG_TMPFS_ROOT
    +static int rootfs_get_sb(struct file_system_type *fs_type,
    + int flags, const char *dev_name, void *data, struct vfsmount *mnt)
    +{
    + return get_sb_nodev(fs_type, flags, data, shmem_fill_super, mnt);
    +}
    +
    +
    + static struct file_system_type rootfs_fs_type = {
    + .name = "rootfs",
    + .get_sb = rootfs_get_sb,
    + .kill_sb = kill_litter_super,
    + };
    +
    + int __init init_rootfs(void)
    + {
    + if (init_inodecache())
    + panic("Can't initialize shm inode cache");
    + return register_filesystem(&rootfs_fs_type);
    + }
    + #endif
    +
    /**
    * shmem_zero_setup - setup a shared anonymous mapping
    * @vma: the vma to be mmapped is prepared by do_mmap_pgoff

    --
    "If your attack is going too well, you're walking into an ambush."
    -Infantry Journal
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  2. Re: [PATCH] use tmpfs for rootfs

    On Thu, 16 Oct 2008, Bodo Eggert wrote:
    > +config TMPFS_ROOT
    > + bool "Use tmpfs instrad of ramfs for initramfs"
    > + depends on TMPFS && SHMEM
    > + default n
    > + help
    > + This replaces the ramfs used for unpacking the cpio images
    > + with tmpfs.
    > +
    > + If unsure, say N
    > +
    > +config RAMFS
    > + bool "Ramfs file system support" if TMPFS_ROOT
    > + default y
    > + ---help---
    > + Ramfs is a file system which keeps all files in RAM. Unlike tmpfs,
    > + it cannot be swapped to disk, and it has the risk of deadlocking
    > + the system by using all memory.
    > +
    > + Ramfs is used for booting the system and unpacking the cpio if
    > + TMPFS_ROOT is not set.


    Something seems to be missing, as you add CONFIG_RAMFS, but it's nowhere used?

    Gr{oetje,eeting}s,

    Geert

    --
    Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

    In personal conversations with technical people, I call myself a hacker. But
    when I'm talking to journalists I just say "programmer" or something like that.
    -- Linus Torvalds
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  3. Re: [PATCH] use tmpfs for rootfs

    On Thu, 16 Oct 2008, Geert Uytterhoeven wrote:
    > On Thu, 16 Oct 2008, Bodo Eggert wrote:


    > > +config TMPFS_ROOT
    > > + bool "Use tmpfs instrad of ramfs for initramfs"
    > > + depends on TMPFS && SHMEM
    > > + default n
    > > + help
    > > + This replaces the ramfs used for unpacking the cpio images
    > > + with tmpfs.
    > > +
    > > + If unsure, say N
    > > +
    > > +config RAMFS
    > > + bool "Ramfs file system support" if TMPFS_ROOT
    > > + default y
    > > + ---help---
    > > + Ramfs is a file system which keeps all files in RAM. Unlike tmpfs,
    > > + it cannot be swapped to disk, and it has the risk of deadlocking
    > > + the system by using all memory.
    > > +
    > > + Ramfs is used for booting the system and unpacking the cpio if
    > > + TMPFS_ROOT is not set.

    >
    > Something seems to be missing, as you add CONFIG_RAMFS, but it's nowhere used?
    >
    > Gr{oetje,eeting}s,


    Yes. I managed to edit the wrong Makefile. Since there seems no way of
    sensibly appending a patch to a mail, I'll reply with the corrected patch.
    --
    Never stand when you can sit, never sit when you can lie down, never stay
    awake when you can sleep.
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  4. [PATCH] use tmpfs for rootfs v2

    This patch allows chosing tmpfs instead of ramfs for the root filesystem.
    Having tmpfs is usefull for running systems from RAM, because it does not
    risk deadlocking the system and possibly allows swapping. Using tmpfs
    increases the kernel by 10 bytes on x86_64.

    Having tmpfs as the root filesystem allows you to get rid of the now unused
    ramfs and free some kernel memory. On my system, that's about 5198 bytes
    compared to having a ramfs root.

    Off cause you can mount tmpfs and move around the data, but this is slower
    (having to copy around the data), more error-prone and it uses more memory.
    Besides that, I don't see the point in explicitely doing the wrong thing
    and then having everybody fix it.


    Signed-off-by: Bodo Eggert <7eggert@gmx.de>

    ---
    Changes to v1: Include the change to the Makefile.

    Some numbers for my system: (from make and from size vmlinux)

    Setup is 10716 bytes (padded to 10752 bytes).
    System is 2659 kB
    text data bss dec hex filename
    5341667 874212 562992 6778871 676ff7 vmlinux

    having TMPFS_IS_ROOT:
    Setup is 10716 bytes (padded to 10752 bytes).
    System is 2659 kB
    text data bss dec hex filename
    5341677 874212 562992 6778881 677001 vmlinux
    +10

    not having ramfs:
    Setup is 10716 bytes (padded to 10752 bytes).
    System is 2659 kB
    text data bss dec hex filename
    5336733 873948 562992 6773673 675ba9 vmlinux
    -4934 -264


    fs/Kconfig | 21 +++++++++++++++++++++
    fs/Makefile | 2 +-
    fs/ramfs/inode.c | 39 +++++++++++++++++++++------------------
    mm/shmem.c | 26 ++++++++++++++++++++++++++
    4 files changed, 69 insertions(+), 19 deletions(-)

    diff -pruNXdontdiff linux-2.6.27.2-numlock/fs/Kconfig linux-2.6.27.3-tmpfs/fs/Kconfig
    --- linux-2.6.27.2-numlock/fs/Kconfig 2008-10-10 13:18:34.000000000 +0200
    +++ linux-2.6.27.3-tmpfs/fs/Kconfig 2008-10-11 15:42:21.000000000 +0200
    @@ -953,6 +953,27 @@ config TMPFS_POSIX_ACL

    If you don't know what Access Control Lists are, say N.

    +config TMPFS_ROOT
    + bool "Use tmpfs instrad of ramfs for initramfs"
    + depends on TMPFS && SHMEM
    + default n
    + help
    + This replaces the ramfs used for unpacking the cpio images
    + with tmpfs.
    +
    + If unsure, say N
    +
    +config RAMFS
    + bool "Ramfs file system support" if TMPFS_ROOT
    + default y
    + ---help---
    + Ramfs is a file system which keeps all files in RAM. Unlike tmpfs,
    + it cannot be swapped to disk, and it has the risk of deadlocking
    + the system by using all memory.
    +
    + Ramfs is used for booting the system and unpacking the cpio if
    + TMPFS_ROOT is not set.
    +
    config HUGETLBFS
    bool "HugeTLB file system support"
    depends on X86 || IA64 || PPC64 || SPARC64 || (SUPERH && MMU) || \
    diff -pruNXdontdiff linux-2.6.27.2-numlock/fs/ramfs/inode.c linux-2.6.27.3-tmpfs/fs/ramfs/inode.c
    --- linux-2.6.27.2-numlock/fs/ramfs/inode.c 2008-07-13 23:51:29.000000000 +0200
    +++ linux-2.6.27.3-tmpfs/fs/ramfs/inode.c 2008-10-11 15:50:03.000000000 +0200
    @@ -190,6 +190,13 @@ int ramfs_get_sb(struct file_system_type
    return get_sb_nodev(fs_type, flags, data, ramfs_fill_super, mnt);
    }

    +static struct file_system_type ramfs_fs_type = {
    + .name = "ramfs",
    + .get_sb = ramfs_get_sb,
    + .kill_sb = kill_litter_super,
    +};
    +
    +#ifndef CONFIG_TMPFS_ROOT
    static int rootfs_get_sb(struct file_system_type *fs_type,
    int flags, const char *dev_name, void *data, struct vfsmount *mnt)
    {
    @@ -197,30 +204,12 @@ static int rootfs_get_sb(struct file_sys
    mnt);
    }

    -static struct file_system_type ramfs_fs_type = {
    - .name = "ramfs",
    - .get_sb = ramfs_get_sb,
    - .kill_sb = kill_litter_super,
    -};
    static struct file_system_type rootfs_fs_type = {
    .name = "rootfs",
    .get_sb = rootfs_get_sb,
    .kill_sb = kill_litter_super,
    };

    -static int __init init_ramfs_fs(void)
    -{
    - return register_filesystem(&ramfs_fs_type);
    -}
    -
    -static void __exit exit_ramfs_fs(void)
    -{
    - unregister_filesystem(&ramfs_fs_type);
    -}
    -
    -module_init(init_ramfs_fs)
    -module_exit(exit_ramfs_fs)
    -
    int __init init_rootfs(void)
    {
    int err;
    @@ -235,5 +224,19 @@ int __init init_rootfs(void)

    return err;
    }
    +#endif
    +
    +static int __init init_ramfs_fs(void)
    +{
    + return register_filesystem(&ramfs_fs_type);
    +}
    +
    +static void __exit exit_ramfs_fs(void)
    +{
    + unregister_filesystem(&ramfs_fs_type);
    +}
    +
    +module_init(init_ramfs_fs)
    +module_exit(exit_ramfs_fs)

    MODULE_LICENSE("GPL");
    diff -pruNXdontdiff linux-2.6.27.2-numlock/mm/shmem.c linux-2.6.27.3-tmpfs/mm/shmem.c
    --- linux-2.6.27.2-numlock/mm/shmem.c 2008-10-10 13:18:47.000000000 +0200
    +++ linux-2.6.27.3-tmpfs/mm/shmem.c 2008-10-11 16:05:52.000000000 +0200
    @@ -2366,6 +2366,10 @@ static void init_once(void *foo)

    static int init_inodecache(void)
    {
    +#ifdef CONFIG_TMPFS_ROOT
    + if (shmem_inode_cachep)
    + return 0;
    +#endif
    shmem_inode_cachep = kmem_cache_create("shmem_inode_cache",
    sizeof(struct shmem_inode_info),
    0, SLAB_PANIC, init_once);
    @@ -2583,6 +2587,28 @@ put_memory:
    return ERR_PTR(error);
    }

    +#ifdef CONFIG_TMPFS_ROOT
    +static int rootfs_get_sb(struct file_system_type *fs_type,
    + int flags, const char *dev_name, void *data, struct vfsmount *mnt)
    +{
    + return get_sb_nodev(fs_type, flags, data, shmem_fill_super, mnt);
    +}
    +
    +
    + static struct file_system_type rootfs_fs_type = {
    + .name = "rootfs",
    + .get_sb = rootfs_get_sb,
    + .kill_sb = kill_litter_super,
    + };
    +
    + int __init init_rootfs(void)
    + {
    + if (init_inodecache())
    + panic("Can't initialize shm inode cache");
    + return register_filesystem(&rootfs_fs_type);
    + }
    + #endif
    +
    /**
    * shmem_zero_setup - setup a shared anonymous mapping
    * @vma: the vma to be mmapped is prepared by do_mmap_pgoff
    diff -pruNXdontdiff linux-2.6.27.2-numlock/fs/Makefile linux-2.6.27.3-tmpfs/fs/Makefile
    --- linux-2.6.27.2-numlock/fs/Makefile 2008-10-16 19:25:20.000000000 +0200
    +++ linux-2.6.27.3-tmpfs/fs/Makefile 2008-10-16 19:24:00.000000000 +0200
    @@ -67,6 +67,7 @@ obj-$(CONFIG_PROFILING) += dcookies.o
    obj-$(CONFIG_DLM) += dlm/

    # Do not add any filesystems before this line
    +obj-$(CONFIG_RAMFS) += ramfs/
    obj-$(CONFIG_REISERFS_FS) += reiserfs/
    obj-$(CONFIG_EXT3_FS) += ext3/ # Before ext2 so root fs can be ext3
    obj-$(CONFIG_EXT4DEV_FS) += ext4/ # Before ext2 so root fs can be ext4dev
    @@ -74,7 +75,6 @@ obj-$(CONFIG_JBD) += jbd/
    obj-$(CONFIG_JBD2) += jbd2/
    obj-$(CONFIG_EXT2_FS) += ext2/
    obj-$(CONFIG_CRAMFS) += cramfs/
    -obj-y += ramfs/
    obj-$(CONFIG_HUGETLBFS) += hugetlbfs/
    obj-$(CONFIG_CODA_FS) += coda/
    obj-$(CONFIG_MINIX_FS) += minix/
    --
    Fun things to slip into your budget
    TRUE: $3000 for light bulb rotation
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  5. Re: [PATCH] use tmpfs for rootfs v2

    Bodo Eggert wrote:

    > Having tmpfs as the root filesystem allows you to get rid of the now unused
    > ramfs and free some kernel memory. On my system, that's about 5198 bytes
    > compared to having a ramfs root.


    If you're not using swap, I assume the memory usage of tmpfs and ramfs
    would be identical?

    Chris
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  6. Re: [PATCH] use tmpfs for rootfs v2

    On Thu, Oct 16, 2008 at 10:39 AM, Bodo Eggert <7eggert@gmx.de> wrote:
    > This patch allows chosing tmpfs instead of ramfs for the root filesystem.
    > Having tmpfs is usefull for running systems from RAM, because it does not
    > risk deadlocking the system and possibly allows swapping. Using tmpfs
    > increases the kernel by 10 bytes on x86_64.
    >
    > Having tmpfs as the root filesystem allows you to get rid of the now unused
    > ramfs and free some kernel memory. On my system, that's about 5198 bytes
    > compared to having a ramfs root.
    >
    > Off cause you can mount tmpfs and move around the data, but this is slower
    > (having to copy around the data), more error-prone and it uses more memory.
    > Besides that, I don't see the point in explicitely doing the wrong thing
    > and then having everybody fix it.
    >
    >
    > Signed-off-by: Bodo Eggert <7eggert@gmx.de>
    >
    > ---
    > Changes to v1: Include the change to the Makefile.
    >
    > Some numbers for my system: (from make and from size vmlinux)
    >
    > Setup is 10716 bytes (padded to 10752 bytes).
    > System is 2659 kB
    > text data bss dec hex filename
    > 5341667 874212 562992 6778871 676ff7 vmlinux
    >
    > having TMPFS_IS_ROOT:
    > Setup is 10716 bytes (padded to 10752 bytes).
    > System is 2659 kB
    > text data bss dec hex filename
    > 5341677 874212 562992 6778881 677001 vmlinux
    > +10
    >
    > not having ramfs:
    > Setup is 10716 bytes (padded to 10752 bytes).
    > System is 2659 kB
    > text data bss dec hex filename
    > 5336733 873948 562992 6773673 675ba9 vmlinux
    > -4934 -264
    >
    >
    > fs/Kconfig | 21 +++++++++++++++++++++
    > fs/Makefile | 2 +-
    > fs/ramfs/inode.c | 39 +++++++++++++++++++++------------------
    > mm/shmem.c | 26 ++++++++++++++++++++++++++
    > 4 files changed, 69 insertions(+), 19 deletions(-)
    >
    > diff -pruNXdontdiff linux-2.6.27.2-numlock/fs/Kconfig linux-2.6.27.3-tmpfs/fs/Kconfig
    > --- linux-2.6.27.2-numlock/fs/Kconfig 2008-10-10 13:18:34.000000000 +0200
    > +++ linux-2.6.27.3-tmpfs/fs/Kconfig 2008-10-11 15:42:21.000000000 +0200
    > @@ -953,6 +953,27 @@ config TMPFS_POSIX_ACL
    >
    > If you don't know what Access Control Lists are, say N.
    >
    > +config TMPFS_ROOT
    > + bool "Use tmpfs instrad of ramfs for initramfs"
    > + depends on TMPFS && SHMEM
    > + default n
    > + help
    > + This replaces the ramfs used for unpacking the cpio images
    > + with tmpfs.
    > +
    > + If unsure, say N
    > +
    > +config RAMFS
    > + bool "Ramfs file system support" if TMPFS_ROOT
    > + default y
    > + ---help---
    > + Ramfs is a file system which keeps all files in RAM. Unlike tmpfs,
    > + it cannot be swapped to disk, and it has the risk of deadlocking
    > + the system by using all memory.
    > +
    > + Ramfs is used for booting the system and unpacking the cpio if
    > + TMPFS_ROOT is not set.
    > +
    > config HUGETLBFS
    > bool "HugeTLB file system support"
    > depends on X86 || IA64 || PPC64 || SPARC64 || (SUPERH && MMU) || \
    > diff -pruNXdontdiff linux-2.6.27.2-numlock/fs/ramfs/inode.c linux-2.6.27.3-tmpfs/fs/ramfs/inode.c
    > --- linux-2.6.27.2-numlock/fs/ramfs/inode.c 2008-07-13 23:51:29.000000000 +0200
    > +++ linux-2.6.27.3-tmpfs/fs/ramfs/inode.c 2008-10-11 15:50:03.000000000 +0200
    > @@ -190,6 +190,13 @@ int ramfs_get_sb(struct file_system_type
    > return get_sb_nodev(fs_type, flags, data, ramfs_fill_super, mnt);
    > }
    >
    > +static struct file_system_type ramfs_fs_type = {
    > + .name = "ramfs",
    > + .get_sb = ramfs_get_sb,
    > + .kill_sb = kill_litter_super,
    > +};
    > +
    > +#ifndef CONFIG_TMPFS_ROOT
    > static int rootfs_get_sb(struct file_system_type *fs_type,
    > int flags, const char *dev_name, void *data, struct vfsmount *mnt)
    > {
    > @@ -197,30 +204,12 @@ static int rootfs_get_sb(struct file_sys
    > mnt);
    > }
    >
    > -static struct file_system_type ramfs_fs_type = {
    > - .name = "ramfs",
    > - .get_sb = ramfs_get_sb,
    > - .kill_sb = kill_litter_super,
    > -};
    > static struct file_system_type rootfs_fs_type = {
    > .name = "rootfs",
    > .get_sb = rootfs_get_sb,
    > .kill_sb = kill_litter_super,
    > };
    >
    > -static int __init init_ramfs_fs(void)
    > -{
    > - return register_filesystem(&ramfs_fs_type);
    > -}
    > -
    > -static void __exit exit_ramfs_fs(void)
    > -{
    > - unregister_filesystem(&ramfs_fs_type);
    > -}
    > -
    > -module_init(init_ramfs_fs)
    > -module_exit(exit_ramfs_fs)
    > -
    > int __init init_rootfs(void)
    > {
    > int err;
    > @@ -235,5 +224,19 @@ int __init init_rootfs(void)
    >
    > return err;
    > }
    > +#endif
    > +
    > +static int __init init_ramfs_fs(void)
    > +{
    > + return register_filesystem(&ramfs_fs_type);
    > +}
    > +
    > +static void __exit exit_ramfs_fs(void)
    > +{
    > + unregister_filesystem(&ramfs_fs_type);
    > +}
    > +
    > +module_init(init_ramfs_fs)
    > +module_exit(exit_ramfs_fs)
    >
    > MODULE_LICENSE("GPL");
    > diff -pruNXdontdiff linux-2.6.27.2-numlock/mm/shmem.c linux-2.6.27.3-tmpfs/mm/shmem.c
    > --- linux-2.6.27.2-numlock/mm/shmem.c 2008-10-10 13:18:47.000000000 +0200
    > +++ linux-2.6.27.3-tmpfs/mm/shmem.c 2008-10-11 16:05:52.000000000 +0200
    > @@ -2366,6 +2366,10 @@ static void init_once(void *foo)
    >
    > static int init_inodecache(void)
    > {
    > +#ifdef CONFIG_TMPFS_ROOT
    > + if (shmem_inode_cachep)
    > + return 0;
    > +#endif
    > shmem_inode_cachep = kmem_cache_create("shmem_inode_cache",
    > sizeof(struct shmem_inode_info),
    > 0, SLAB_PANIC, init_once);
    > @@ -2583,6 +2587,28 @@ put_memory:
    > return ERR_PTR(error);
    > }
    >
    > +#ifdef CONFIG_TMPFS_ROOT
    > +static int rootfs_get_sb(struct file_system_type *fs_type,
    > + int flags, const char *dev_name, void *data, struct vfsmount *mnt)
    > +{
    > + return get_sb_nodev(fs_type, flags, data, shmem_fill_super, mnt);
    > +}
    > +
    > +
    > + static struct file_system_type rootfs_fs_type = {
    > + .name = "rootfs",
    > + .get_sb = rootfs_get_sb,
    > + .kill_sb = kill_litter_super,
    > + };
    > +
    > + int __init init_rootfs(void)
    > + {
    > + if (init_inodecache())
    > + panic("Can't initialize shm inode cache");
    > + return register_filesystem(&rootfs_fs_type);
    > + }
    > + #endif
    > +
    > /**
    > * shmem_zero_setup - setup a shared anonymous mapping
    > * @vma: the vma to be mmapped is prepared by do_mmap_pgoff
    > diff -pruNXdontdiff linux-2.6.27.2-numlock/fs/Makefile linux-2.6.27.3-tmpfs/fs/Makefile
    > --- linux-2.6.27.2-numlock/fs/Makefile 2008-10-16 19:25:20.000000000 +0200
    > +++ linux-2.6.27.3-tmpfs/fs/Makefile 2008-10-16 19:24:00.000000000 +0200
    > @@ -67,6 +67,7 @@ obj-$(CONFIG_PROFILING) += dcookies.o
    > obj-$(CONFIG_DLM) += dlm/
    >
    > # Do not add any filesystems before this line
    > +obj-$(CONFIG_RAMFS) += ramfs/
    > obj-$(CONFIG_REISERFS_FS) += reiserfs/
    > obj-$(CONFIG_EXT3_FS) += ext3/ # Before ext2 so root fs can be ext3
    > obj-$(CONFIG_EXT4DEV_FS) += ext4/ # Before ext2 so root fs can be ext4dev
    > @@ -74,7 +75,6 @@ obj-$(CONFIG_JBD) += jbd/
    > obj-$(CONFIG_JBD2) += jbd2/
    > obj-$(CONFIG_EXT2_FS) += ext2/
    > obj-$(CONFIG_CRAMFS) += cramfs/
    > -obj-y += ramfs/
    > obj-$(CONFIG_HUGETLBFS) += hugetlbfs/
    > obj-$(CONFIG_CODA_FS) += coda/
    > obj-$(CONFIG_MINIX_FS) += minix/


    Haven't gotten the hang of attaching patches inline using gmail yet.
    Here is a patch ontop of the previous one that fixes whitespace problems
    pointed out by checkpatch.pl. It is based on 2.7.27
    3fa8749e584b55f1180411ab1b51117190bac1e5

    It is also available here:
    http://www.digitalprognosis.com/open...ompliant.patch

    --
    Jeff Schroeder

    Don't drink and derive, alcohol and analysis don't mix.
    http://www.digitalprognosis.com


  7. Re: [PATCH] use tmpfs for rootfs v2

    On Thu, 16 Oct 2008, Chris Friesen wrote:
    > Bodo Eggert wrote:


    > > Having tmpfs as the root filesystem allows you to get rid of the now unused
    > > ramfs and free some kernel memory. On my system, that's about 5198 bytes
    > > compared to having a ramfs root.

    >
    > If you're not using swap, I assume the memory usage of tmpfs and ramfs would
    > be identical?


    I'd rather think having ACL, security labels etc. pp. will make tmpfs use
    more memory per file or directory. If you have no use for tmpfs' features,
    you should use ramfs. But if you do want to use tmpfs in your system,
    my guess is you'll be most likely be better off using no ramfs.
    --
    Good programming is 99% sweat and 1% coffee.
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  8. Re: [PATCH] use tmpfs for rootfs v2

    On Thu, 16 Oct 2008, Jeff Schroeder wrote:


    > Haven't gotten the hang of attaching patches inline using gmail yet.
    > Here is a patch ontop of the previous one that fixes whitespace problems
    > pointed out by checkpatch.pl. It is based on 2.7.27
    > 3fa8749e584b55f1180411ab1b51117190bac1e5
    >
    > It is also available here:
    > http://www.digitalprognosis.com/open...ompliant.patch


    Thanks. I'll update the patch soon.

    Things you should know: In foo.rej, there are extra spaces. Some fools will
    keep them while applying these hunks.-(

    --
    "A slipping gear could let your M203 grenade launcher fire when you
    least expect it. That would make you quite unpopular in what's left of
    your unit."
    -Army's magazine of preventive maintenance.
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  9. [PATCH] use tmpfs for rootfs v3


    This patch allows chosing tmpfs instead of ramfs for the root filesystem.
    Having tmpfs is usefull for running systems from RAM, because it does not
    risk deadlocking the system and possibly allows swapping. Using tmpfs
    increases the kernel by 10 bytes on x86_64.

    Having tmpfs as the root filesystem allows you to get rid of the now unused
    ramfs and free some kernel memory. On my system, that's about 5198 bytes
    compared to having a ramfs root.

    Off cause you can mount tmpfs and move around the data, but this is slower
    (having to copy around the data), more error-prone and it uses more memory.
    Besides that, I don't see the point in explicitely doing the wrong thing
    and then having everybody fix it.


    Signed-off-by: Bodo Eggert <7eggert@gmx.de>

    ---

    Changes to v1: Include the change to the Makefile.
    Changes to v2: Fix whitespace damage

    Some numbers for my system: (from make and from size vmlinux)

    Setup is 10716 bytes (padded to 10752 bytes).
    System is 2659 kB
    text data bss dec hex filename
    5341667 874212 562992 6778871 676ff7 vmlinux

    having TMPFS_IS_ROOT:
    Setup is 10716 bytes (padded to 10752 bytes).
    System is 2659 kB
    text data bss dec hex filename
    5341677 874212 562992 6778881 677001 vmlinux
    +10

    not having ramfs:
    Setup is 10716 bytes (padded to 10752 bytes).
    System is 2659 kB
    text data bss dec hex filename
    5336733 873948 562992 6773673 675ba9 vmlinux
    -4934 -264


    fs/Kconfig | 21 +++++++++++++++++++++
    fs/Makefile | 2 +-
    fs/ramfs/inode.c | 39 +++++++++++++++++++++------------------
    mm/shmem.c | 26 ++++++++++++++++++++++++++
    4 files changed, 69 insertions(+), 19 deletions(-)

    diff -pruNXdontdiff linux-2.6.27.2-numlock/fs/Kconfig linux-2.6.27.3-tmpfs/fs/Kconfig
    --- linux-2.6.27.2-numlock/fs/Kconfig 2008-10-10 13:18:34.000000000 +0200
    +++ linux-2.6.27.3-tmpfs/fs/Kconfig 2008-10-11 15:42:21.000000000 +0200
    @@ -953,6 +953,27 @@ config TMPFS_POSIX_ACL

    If you don't know what Access Control Lists are, say N.

    +config TMPFS_ROOT
    + bool "Use tmpfs instrad of ramfs for initramfs"
    + depends on TMPFS && SHMEM
    + default n
    + help
    + This replaces the ramfs used for unpacking the cpio images
    + with tmpfs.
    +
    + If unsure, say N
    +
    +config RAMFS
    + bool "Ramfs file system support" if TMPFS_ROOT
    + default y
    + ---help---
    + Ramfs is a file system which keeps all files in RAM. Unlike tmpfs,
    + it cannot be swapped to disk, and it has the risk of deadlocking
    + the system by using all memory.
    +
    + Ramfs is used for booting the system and unpacking the cpio if
    + TMPFS_ROOT is not set.
    +
    config HUGETLBFS
    bool "HugeTLB file system support"
    depends on X86 || IA64 || PPC64 || SPARC64 || (SUPERH && MMU) || \
    diff -pruNXdontdiff linux-2.6.27.2-numlock/fs/ramfs/inode.c linux-2.6.27.3-tmpfs/fs/ramfs/inode.c
    --- linux-2.6.27.2-numlock/fs/ramfs/inode.c 2008-07-13 23:51:29.000000000 +0200
    +++ linux-2.6.27.3-tmpfs/fs/ramfs/inode.c 2008-10-11 15:50:03.000000000 +0200
    @@ -190,6 +190,13 @@ int ramfs_get_sb(struct file_system_type
    return get_sb_nodev(fs_type, flags, data, ramfs_fill_super, mnt);
    }

    +static struct file_system_type ramfs_fs_type = {
    + .name = "ramfs",
    + .get_sb = ramfs_get_sb,
    + .kill_sb = kill_litter_super,
    +};
    +
    +#ifndef CONFIG_TMPFS_ROOT
    static int rootfs_get_sb(struct file_system_type *fs_type,
    int flags, const char *dev_name, void *data, struct vfsmount *mnt)
    {
    @@ -197,30 +204,12 @@ static int rootfs_get_sb(struct file_sys
    mnt);
    }

    -static struct file_system_type ramfs_fs_type = {
    - .name = "ramfs",
    - .get_sb = ramfs_get_sb,
    - .kill_sb = kill_litter_super,
    -};
    static struct file_system_type rootfs_fs_type = {
    .name = "rootfs",
    .get_sb = rootfs_get_sb,
    .kill_sb = kill_litter_super,
    };

    -static int __init init_ramfs_fs(void)
    -{
    - return register_filesystem(&ramfs_fs_type);
    -}
    -
    -static void __exit exit_ramfs_fs(void)
    -{
    - unregister_filesystem(&ramfs_fs_type);
    -}
    -
    -module_init(init_ramfs_fs)
    -module_exit(exit_ramfs_fs)
    -
    int __init init_rootfs(void)
    {
    int err;
    @@ -235,5 +224,19 @@ int __init init_rootfs(void)

    return err;
    }
    +#endif
    +
    +static int __init init_ramfs_fs(void)
    +{
    + return register_filesystem(&ramfs_fs_type);
    +}
    +
    +static void __exit exit_ramfs_fs(void)
    +{
    + unregister_filesystem(&ramfs_fs_type);
    +}
    +
    +module_init(init_ramfs_fs)
    +module_exit(exit_ramfs_fs)

    MODULE_LICENSE("GPL");
    diff -pruNXdontdiff linux-2.6.27.2-numlock/mm/shmem.c linux-2.6.27.3-tmpfs/mm/shmem.c
    --- linux-2.6.27.2-numlock/mm/shmem.c 2008-10-10 13:18:47.000000000 +0200
    +++ linux-2.6.27.3-tmpfs/mm/shmem.c 2008-10-11 16:05:52.000000000 +0200
    @@ -2366,6 +2366,10 @@ static void init_once(void *foo)

    static int init_inodecache(void)
    {
    +#ifdef CONFIG_TMPFS_ROOT
    + if (shmem_inode_cachep)
    + return 0;
    +#endif
    shmem_inode_cachep = kmem_cache_create("shmem_inode_cache",
    sizeof(struct shmem_inode_info),
    0, SLAB_PANIC, init_once);
    @@ -2583,6 +2587,28 @@ put_memory:
    return ERR_PTR(error);
    }

    +#ifdef CONFIG_TMPFS_ROOT
    +static int rootfs_get_sb(struct file_system_type *fs_type,
    + int flags, const char *dev_name, void *data, struct vfsmount *mnt)
    +{
    + return get_sb_nodev(fs_type, flags, data, shmem_fill_super, mnt);
    +}
    +
    +
    +static struct file_system_type rootfs_fs_type = {
    + .name = "rootfs",
    + .get_sb = rootfs_get_sb,
    + .kill_sb = kill_litter_super,
    +};
    +
    +int __init init_rootfs(void)
    +{
    + if (init_inodecache())
    + panic("Can't initialize shm inode cache");
    + return register_filesystem(&rootfs_fs_type);
    +}
    +#endif
    +
    /**
    * shmem_zero_setup - setup a shared anonymous mapping
    * @vma: the vma to be mmapped is prepared by do_mmap_pgoff
    diff -pruNXdontdiff linux-2.6.27.2-numlock/fs/Makefile linux-2.6.27.3-tmpfs/fs/Makefile
    --- linux-2.6.27.2-numlock/fs/Makefile 2008-10-16 19:25:20.000000000 +0200
    +++ linux-2.6.27.3-tmpfs/fs/Makefile 2008-10-16 19:24:00.000000000 +0200
    @@ -67,6 +67,7 @@ obj-$(CONFIG_PROFILING) += dcookies.o
    obj-$(CONFIG_DLM) += dlm/

    # Do not add any filesystems before this line
    +obj-$(CONFIG_RAMFS) += ramfs/
    obj-$(CONFIG_REISERFS_FS) += reiserfs/
    obj-$(CONFIG_EXT3_FS) += ext3/ # Before ext2 so root fs can be ext3
    obj-$(CONFIG_EXT4DEV_FS) += ext4/ # Before ext2 so root fs can be ext4dev
    @@ -74,7 +75,6 @@ obj-$(CONFIG_JBD) += jbd/
    obj-$(CONFIG_JBD2) += jbd2/
    obj-$(CONFIG_EXT2_FS) += ext2/
    obj-$(CONFIG_CRAMFS) += cramfs/
    -obj-y += ramfs/
    obj-$(CONFIG_HUGETLBFS) += hugetlbfs/
    obj-$(CONFIG_CODA_FS) += coda/
    obj-$(CONFIG_MINIX_FS) += minix/
    --
    In the beginning, God created the earth and rested.
    Then God created Man and rested.
    Then God created Woman.
    Since then, neither God nor Man has rested.
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  10. Re: [PATCH] use tmpfs for rootfs v3

    On Fri, Oct 17, 2008 at 07:16, Bodo Eggert wrote:
    > This patch allows chosing tmpfs instead of ramfs for the root filesystem.
    > Having tmpfs is usefull for running systems from RAM, because it does not
    > risk deadlocking the system and possibly allows swapping. Using tmpfs
    > increases the kernel by 10 bytes on x86_64.


    great option, thanks

    > --- linux-2.6.27.2-numlock/fs/Kconfig 2008-10-10 13:18:34.000000000 +0200
    > +++ linux-2.6.27.3-tmpfs/fs/Kconfig 2008-10-11 15:42:21.000000000 +0200
    > @@ -953,6 +953,27 @@ config TMPFS_POSIX_ACL
    >
    > If you don't know what Access Control Lists are, say N.
    >
    > +config TMPFS_ROOT
    > + bool "Use tmpfs instrad of ramfs for initramfs"
    > + depends on TMPFS && SHMEM
    > + default n
    > + help
    > + This replaces the ramfs used for unpacking the cpio images
    > + with tmpfs.
    > +
    > + If unsure, say N


    this should be init/Kconfig and depend on BLK_DEV_INITRD i think. and
    then update the comment to talk about the initial filesystem rather
    than cpio images.

    > +config RAMFS
    > + bool "Ramfs file system support" if TMPFS_ROOT


    if you have initramfs support disabled, then you should be able to
    disable RAMFS as well. so perhaps the depend should read like:
    if BLK_DEV_INITRD && TMPFS_ROOT || !BLK_DEV_INITRD
    -mike
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  11. Re: [PATCH] use tmpfs for rootfs v3

    On Sun, 19 Oct 2008, Mike Frysinger wrote:
    > On Fri, Oct 17, 2008 at 07:16, Bodo Eggert wrote:


    > > This patch allows chosing tmpfs instead of ramfs for the root filesystem.
    > > Having tmpfs is usefull for running systems from RAM, because it does not
    > > risk deadlocking the system and possibly allows swapping. Using tmpfs
    > > increases the kernel by 10 bytes on x86_64.

    >
    > great option, thanks
    >
    > > --- linux-2.6.27.2-numlock/fs/Kconfig 2008-10-10 13:18:34.000000000 +0200
    > > +++ linux-2.6.27.3-tmpfs/fs/Kconfig 2008-10-11 15:42:21.000000000 +0200
    > > @@ -953,6 +953,27 @@ config TMPFS_POSIX_ACL
    > >
    > > If you don't know what Access Control Lists are, say N.
    > >
    > > +config TMPFS_ROOT
    > > + bool "Use tmpfs instrad of ramfs for initramfs"
    > > + depends on TMPFS && SHMEM
    > > + default n
    > > + help
    > > + This replaces the ramfs used for unpacking the cpio images
    > > + with tmpfs.
    > > +
    > > + If unsure, say N

    >
    > this should be init/Kconfig and depend on BLK_DEV_INITRD i think. and
    > then update the comment to talk about the initial filesystem rather
    > than cpio images.


    Maybe, but then you'd have to go to filesystems->pseudo-fs to enable tmpfs,
    then to i-don't-remember to set it as the rootfs, and then back to
    fs->pseudo-fs to unselect ramfs.

    Thinking of it as a tmpfs option makes it much easier to use.

    > > +config RAMFS
    > > + bool "Ramfs file system support" if TMPFS_ROOT

    >
    > if you have initramfs support disabled, then you should be able to
    > disable RAMFS as well. so perhaps the depend should read like:
    > if BLK_DEV_INITRD && TMPFS_ROOT || !BLK_DEV_INITRD


    No, since a kernel not having initcpio support will mount rootfs anyway,
    create some directories and special files and use them to open the console
    and to mount the real root into.
    --
    The enemy diversion you have been ignoring will be the main attack.
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  12. Re: [PATCH] use tmpfs for rootfs v3

    On Mon, Oct 20, 2008 at 14:13, Bodo Eggert wrote:
    > On Sun, 19 Oct 2008, Mike Frysinger wrote:
    >> On Fri, Oct 17, 2008 at 07:16, Bodo Eggert wrote:
    >> > --- linux-2.6.27.2-numlock/fs/Kconfig 2008-10-10 13:18:34.000000000 +0200
    >> > +++ linux-2.6.27.3-tmpfs/fs/Kconfig 2008-10-11 15:42:21.000000000 +0200
    >> > @@ -953,6 +953,27 @@ config TMPFS_POSIX_ACL
    >> >
    >> > If you don't know what Access Control Lists are, say N.
    >> >
    >> > +config TMPFS_ROOT
    >> > + bool "Use tmpfs instrad of ramfs for initramfs"
    >> > + depends on TMPFS && SHMEM
    >> > + default n
    >> > + help
    >> > + This replaces the ramfs used for unpacking the cpio images
    >> > + with tmpfs.
    >> > +
    >> > + If unsure, say N

    >>
    >> this should be init/Kconfig and depend on BLK_DEV_INITRD i think. and
    >> then update the comment to talk about the initial filesystem rather
    >> than cpio images.

    >
    > Maybe, but then you'd have to go to filesystems->pseudo-fs to enable tmpfs,
    > then to i-don't-remember to set it as the rootfs, and then back to
    > fs->pseudo-fs to unselect ramfs.
    >
    > Thinking of it as a tmpfs option makes it much easier to use.


    i guess that works

    >> > +config RAMFS
    >> > + bool "Ramfs file system support" if TMPFS_ROOT

    >>
    >> if you have initramfs support disabled, then you should be able to
    >> disable RAMFS as well. so perhaps the depend should read like:
    >> if BLK_DEV_INITRD && TMPFS_ROOT || !BLK_DEV_INITRD

    >
    > No, since a kernel not having initcpio support will mount rootfs anyway,


    we should get that fixed then

    > create some directories and special files and use them to open the console
    > and to mount the real root into.


    erm, i dont recall seeing any init code create any directories or
    files. opening /dev/console doesnt require the fake rootfs, nor does
    mounting the real root on top of it. where exactly do you see this
    logic ?
    -mike
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

+ Reply to Thread