mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* Re: [PATCH 2/3][try 1] init: enable system-on-initramfs: root-on-tmpfs
@ 2007-07-14  3:18 Al Boldi
  0 siblings, 0 replies; 6+ messages in thread
From: Al Boldi @ 2007-07-14  3:18 UTC (permalink / raw)
  To: linux-kernel

Bodo Eggert wrote:
> Change the root filesystem to tmpfs. Doing this makes having a system on
> tmpfs much easier, while allowing to discard the now unnecessary ramfs.

Thanks a lot!

> Having the rootfs on tmpfs allows to safely run e.g. a rescue system
> without using tricks. You might even include the rescue system into the
> kernel.
>
> This is a rework of Al Boldi's "[PATCH] initramfs: Allow rootfs to use
> tmpfs instead of ramfs". All the fame belongs to him, the bugs belong to
> me.

Actually, my patch was a rework of John Zielinski's 
http://marc.info/?l=linux-kernel&m=107013630212011&w=4 patch, so the credit 
really goes to him.

> Signed-Off-By: Bodo Eggert <7eggert@gmx.de>
>
>
> diff -Xdontdiff -pruN linux-2.6.22.base/fs/Kconfig
> linux-2.6.22.tmpfsroot/fs/Kconfig --- linux-2.6.22.base/fs/Kconfig       
> 2007-07-12 14:05:16.000000000 +0200 +++ linux-2.6.22.tmpfsroot/fs/Kconfig 
>  2007-07-12 15:10:09.000000000 +0200 @@ -989,6 +989,22 @@ config
> TMPFS_POSIX_ACL

Setting this in fs/Kconfig is way to deep, and too far away from the 
initramfs Kconfig, which makes it obscure.

>
>           If you don't know what Access Control Lists are, say N.
>
> +config TMPFS_ROOT
> +       bool "Use tmpfs instrad of ramfs for initramfs"

Check typo.                    

> +       depends on TMPFS

Should probably depend on SHMEM too.

> +       default n
> +       help
> +         This replaces the ramfs used for unpacking the cpio images
> +         with tmpfs, thereby allowing swapping these contents to disk and
> +         adding size limit support.
> +
> +         Side effect:
> +         This is useful only if you don't plan on mounting a different
> +         root filesystem. Therefore it will change the default of the
> +         root= parameter to "rootfs".
> +
> +         If unsure, say N
> +
>  config HUGETLBFS
>         bool "HugeTLB file system support"
>         depends on X86 || IA64 || PPC64 || SPARC64 || SUPERH || BROKEN
> @@ -1003,7 +1019,7 @@ config HUGETLB_PAGE
>         def_bool HUGETLBFS
>
>  config RAMFS
> -       bool
> +       bool "Ramfs file system support" if TMPFS_ROOT

What's wrong with the original Kconfig of making this tristate?

>         default y
>         ---help---
>           Ramfs is a file system which keeps all files in RAM. It allows

:
:

> diff -Xdontdiff -pruN linux-2.6.22.base/mm/shmem.c
> linux-2.6.22.tmpfsroot/mm/shmem.c --- linux-2.6.22.base/mm/shmem.c       
> 2007-07-12 14:05:25.000000000 +0200 +++ linux-2.6.22.tmpfsroot/mm/shmem.c 
>  2007-07-12 15:01:32.000000000 +0200 @@ -2369,6 +2369,8 @@ static void
> init_once(void *foo, struct
>
>  static int init_inodecache(void)
>  {
> +       if (shmem_inode_cachep)
> +               return 0;
>         shmem_inode_cachep = kmem_cache_create("shmem_inode_cache",
>                                 sizeof(struct shmem_inode_info),
>                                 0, 0, init_once, NULL);
> @@ -2582,6 +2584,34 @@ 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|MS_NOUSER, data,
> shmem_fill_super, +                           mnt);

Setting the MS_NOUSER flag will make this invisible to df (diskfree).

> +}
> +
> +/*static struct super_block *rootfs_get_sb(struct file_system_type
> *fs_type, +       int flags, const char *dev_name, void *data)
> +{
> +       return get_sb_single(fs_type, flags, data, shmem_fill_super);
> +}*/

You commented this out, probably asking for clarification:  IIRC, it's 
get_sb_single instead of get_sb_nodev, because tmpfs can be mounted more 
than once and thus needs to be reference counted.

> +
> +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
>   *


Thanks!

--
Al


^ permalink raw reply	[flat|nested] 6+ messages in thread
* [PATCH 0/3][try 1] init: enable system-on-initramfs
@ 2007-07-13 18:56 Bodo Eggert
  2007-07-13 19:00 ` [PATCH 2/3][try 1] init: enable system-on-initramfs: root-on-tmpfs Bodo Eggert
  0 siblings, 1 reply; 6+ messages in thread
From: Bodo Eggert @ 2007-07-13 18:56 UTC (permalink / raw)
  To: linux-kernel, 7eggert

I toyed with setting up a diskless system in initramfs. In the process, I
came across some things:

1)  There is no way to have the kernel not mount a filesystem,
    unless you use /init or rdinit=.

1a) In the process of writing these patches, I found prepare_namespace not to
    be called if /init is present. prepare_namespace will call
    security_sb_post_mountroot after mounting the root fs. I did not yet see
    a way to call this from /init, and grepping kinit for "security" did not
    help, too.

   This is probably a bug, but using the features of this patchset, you'll
   avoid hitting it. Therefore this patchset does nothing about that.
 
2)  If you want to use tmpfs, you need a script which essentially duplicates
    the work the kernel just did: Mount the root fs, unpack or move the files.
    Using tmpfs instead for the first root mount is as cheap as using ramfs,
    as long as tmpfs is used anyway (and most likely it is).

2a) I figured if you prepared the root fs to contain a running system, you
    woud probably also set up a runnable system on it. Therefore I changed
    the default to boot from tmpfs if there was no /init nor a root= option.
    (If there is a /init, it will be executed as usural.)

    Unfortunately the way I do it, this will override the rdev setting, but
    that should be OK, since rdev is dead. Isn't it?

3)  While I was at it, I figured I would not need most of the init/mount*
    code anymore. Therefore I made patch 3, which ifdefs it out as far as
    possible while still aiming for a small change.

Patch 1 adds the capability to use root=rootfs.
Patch 2 adds the capability to use tmpfs for root, default root=rootfs.
        ramfs becomes optional if rootfs=tmpfs.
Patch 3 allows to remove the capability of automounting filesystems.

All patches appyl to 2.6.22.1
-- 
Fun things to slip into your budget
Remuneration compensation upgrade. (otherwise called a pay raise).

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2007-07-26 20:35 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <8GGkX-2Xv-5@gated-at.bofh.it>
2007-07-14 18:49 ` [PATCH 2/3][try 1] init: enable system-on-initramfs: root-on-tmpfs Bodo Eggert
2007-07-15  5:24   ` Al Boldi
2007-07-26 20:34     ` Al Boldi
2007-07-15  5:24   ` [PATCH 0/3][try 1] init: enable system-on-initramfs Al Boldi
2007-07-14  3:18 [PATCH 2/3][try 1] init: enable system-on-initramfs: root-on-tmpfs Al Boldi
  -- strict thread matches above, loose matches on Subject: below --
2007-07-13 18:56 [PATCH 0/3][try 1] init: enable system-on-initramfs Bodo Eggert
2007-07-13 19:00 ` [PATCH 2/3][try 1] init: enable system-on-initramfs: root-on-tmpfs Bodo Eggert

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®