On Sat, 5 Jun 2021 11:44:45 +0800 menglong8.dong@xxxxxxxxx wrote: > From: Menglong Dong <dong.menglong@xxxxxxxxxx> > > 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@xxxxxxxxxx/) > 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@xxxxxxxxxx> 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@xxxxxxxxxx>