Re: [PATCH v6 0/2] init/initramfs.c: make initramfs support pivot_root

Masami Hiramatsu
2021-06-09T14:03:25Z

On Sat, 5 Jun 2021 11:44:45 +0800
menglong8.dong@gmail.com wrote:

> From: Menglong Dong <dong.menglong@zte.com.cn>
>
> As Luis Chamberlain suggested, I split the patch:
> [init/initramfs.c: make initramfs support pivot_root]
> (https://lore.kernel.org/linux-fsdevel/20210520154244.20209-1-dong.menglong@zte.com.cn/)
> into three.
>
> The goal of the series patches is to make pivot_root() support initramfs.
>
> In the first patch, I introduce the function ramdisk_exec_exist(), which
> is used to check the exist of 'ramdisk_execute_command' in LOOKUP_DOWN
> lookup mode.
>
> In the second patch, I create a second mount, which is called
> 'user root', and make it become the root. Therefore, the root has a
> parent mount, and it can be umounted or pivot_root.
>
> In the third patch, I fix rootfs_fs_type with ramfs, as it is not used
> directly any more, and it make no sense to switch it between ramfs and
> tmpfs, just fix it with ramfs to simplify the code.

Hi,

I have tested this series on qemu with shell script container on initramfs.
It works for me!

Tested-by: Masami Hiramatsu <mhiramat@kernel.org>

Thank you,

>
>
> Changes since V5:
>
> Remove the third patch and make it combined with the second one.
>
>
> Changes since V4:
>
> Do some more code cleanup for the second patch, include:
> - move 'ramdisk_exec_exist()' to 'init.h'
> - remove unnecessary struct 'fs_rootfs_root'
> - introduce 'revert_mount_rootfs()'
> - [...]
>
>
> Changes since V3:
>
> Do a code cleanup for the second patch, as Christian Brauner suggested:
> - remove the concept 'user root', which seems not suitable.
> - introduce inline function 'check_tmpfs_enabled()' to avoid duplicated
> code.
> - rename function 'mount_user_root' to 'prepare_mount_rootfs'
> - rename function 'end_mount_user_root' to 'finish_mount_rootfs'
> - join 'init_user_rootfs()' with 'prepare_mount_rootfs()'
>
> Changes since V2:
>
> In the first patch, I use vfs_path_lookup() in init_eaccess() to make the
> path lookup follow the mount on '/'. After this, the problem reported by
> Masami Hiramatsu is solved. Thanks for your report :/
>
>
> Changes since V1:
>
> In the first patch, I add the flag LOOKUP_DOWN to init_eaccess(), to make
> it support the check of filesystem mounted on '/'.
>
> In the second patch, I control 'user root' with kconfig option
> 'CONFIG_INITRAMFS_USER_ROOT', and add some comments, as Luis Chamberlain
> suggested.
>
> In the third patch, I make 'rootfs_fs_type' in control of
> 'CONFIG_INITRAMFS_USER_ROOT'.
>
>
>
> Menglong Dong (2):
> init/do_mounts.c: create second mount for initramfs
> init/do_mounts.c: fix rootfs_fs_type with ramfs
>
> include/linux/init.h | 4 ++
> init/do_mounts.c | 101 ++++++++++++++++++++++++++++++++++++++++---
> init/do_mounts.h | 16 ++++++-
> init/initramfs.c | 8 ++++
> usr/Kconfig | 10 +++++
> 5 files changed, 131 insertions(+), 8 deletions(-)
>
> --
> 2.32.0.rc0
>

--
Masami Hiramatsu <mhiramat@kernel.org>