This reverts commit 9e6e0d5f2a2713402cf9dce69b9f9b516e4185d2. The reverted commit introduces broken builds. Even though the cpio archive does contain all the specified files, it seems that the kernel, while populating rootfs, scans the cpio buffer linearly and fails to create files whose parent directories are nonexistent at the moment of this failed creation. As a result, such files are not accessible when kernel boots into initramfs.
Here is how to reproduce, from inside kernel source directory, with the patch in question not reverted: $ mkdir -p ../test/find/me/if/you/can $ touch ../test/find/me/if/you/can/file.txt $ cat ../initramfs.list file /busybox-x86_64 ../initramfs/busybox-x86_64 0755 0 0 dir /sbin 0755 0 0 dir /proc 0755 0 0 dir /sys 0755 0 0 dir /bin 0755 0 0 dir /usr 0755 0 0 dir /usr/sbin 0755 0 0 dir /usr/bin 0755 0 0 dir /etc 0755 0 0 dir /etc/init.d 0755 0 0 file /etc/inittab ../initramfs/inittab 0755 0 0 file /etc/init.d/rcS ../initramfs/rcS-x86_64 0755 0 0 dir /lib 0755 0 0 dir /lib/modules 0755 0 0 $ ls ../initramfs busybox-x86_64 inittab rcS-x86_64 $ cat ../initramfs/inittab ::sysinit:/etc/init.d/rcS ::askfirst:-/bin/sh ::ctrlaltdel:/sbin/reboot ::shutdown:/sbin/swapoff -a ::shutdown:/sbin/umount -a -r ::restart:/sbin/init $ cat ../initramfs/rcS-x86_64 #!/busybox-x86_64 sh /busybox-x86_64 --install mount -t proc none /proc mount -t sysfs none /sys mdev -s echo /sbin/mdev > /proc/sys/kernel/hotplug $ scripts/gen_initramfs_list.sh ../test/ ../initramfs.list ##################### # ../test/ # Last modified: 1534428527.0818855150 file /find/me/if/you/can/file.txt ../test/find/me/if/you/can/file.txt 664 1000 1000 dir /find/me/if/you/can 775 1000 1000 dir /find/me/if/you 775 1000 1000 dir /find/me/if 775 1000 1000 dir /find/me 775 1000 1000 dir /find 775 1000 1000 ##################### # ../initramfs.list # Last modified: 1534433777.8384497600 file /busybox-x86_64 ../initramfs/busybox-x86_64 0755 0 0 dir /sbin 0755 0 0 dir /proc 0755 0 0 dir /sys 0755 0 0 dir /bin 0755 0 0 dir /usr 0755 0 0 dir /usr/sbin 0755 0 0 dir /usr/bin 0755 0 0 dir /etc 0755 0 0 dir /etc/init.d 0755 0 0 file /etc/inittab ../initramfs/inittab 0755 0 0 file /etc/init.d/rcS ../initramfs/rcS-x86_64 0755 0 0 dir /lib 0755 0 0 dir /lib/modules 0755 0 0 $ cat ../initramfs.cpio | cpio -t find/me/if/you/can/file.txt find/me/if/you/can find/me/if/you find/me/if find/me find busybox-x86_64 sbin proc sys bin usr usr/sbin usr/bin etc etc/init.d etc/inittab etc/init.d/rcS lib lib/modules 1961 bloków BUT: $ qemu-system-x86_64 -nographic -serial mon:stdio \ -kernel arch/x86/boot/bzImage \ -append "root=/dev/ram console=ttyS0 rdinit=/busybox-x86_64 init" \ -M q35 -initrd ../initramfs.cpio # ls bin etc linuxrc sbin busybox-x86_64 find proc sys dev lib root usr / # ls -l find total 0 With the patch reverted the file /find/me/if/you/can/file.txt is accessible: $ scripts/gen_initramfs_list.sh ../test/ ../initramfs.list ##################### # ../test/ # Last modified: 1534428527.0818855150 dir /find 775 1000 1000 dir /find/me 775 1000 1000 dir /find/me/if 775 1000 1000 dir /find/me/if/you 775 1000 1000 dir /find/me/if/you/can 775 1000 1000 file /find/me/if/you/can/file.txt ../test/find/me/if/you/can/file.txt 664 1000 1000 ##################### # ../initramfs.list # Last modified: 1534433777.8384497600 file /busybox-x86_64 ../initramfs/busybox-x86_64 0755 0 0 dir /sbin 0755 0 0 dir /proc 0755 0 0 dir /sys 0755 0 0 dir /bin 0755 0 0 dir /usr 0755 0 0 dir /usr/sbin 0755 0 0 dir /usr/bin 0755 0 0 dir /etc 0755 0 0 dir /etc/init.d 0755 0 0 file /etc/inittab ../initramfs/inittab 0755 0 0 file /etc/init.d/rcS ../initramfs/rcS-x86_64 0755 0 0 dir /lib 0755 0 0 dir /lib/modules 0755 0 0 $ cat ../initramfs.cpio | cpio -t find find/me find/me/if find/me/if/you find/me/if/you/can find/me/if/you/can/file.txt busybox-x86_64 sbin proc sys bin usr usr/sbin usr/bin etc etc/init.d etc/inittab etc/init.d/rcS lib lib/modules 1961 bloków $ qemu-system-x86_64 -nographic -serial mon:stdio \ -kernel arch/x86/boot/bzImage \ -append "root=/dev/ram console=ttyS0 rdinit=/busybox-x86_64 init" \ -M q35 -initrd ../initramfs.cpio # find find/ find/ find/me find/me/if find/me/if/you find/me/if/you/can find/me/if/you/can/file.txt / # Signed-off-by: Andrzej Pietrasiewicz <andrze...@samsung.com> --- scripts/gen_initramfs_list.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gen_initramfs_list.sh b/scripts/gen_initramfs_list.sh index 10e528b..e5d7b03 100755 --- a/scripts/gen_initramfs_list.sh +++ b/scripts/gen_initramfs_list.sh @@ -174,7 +174,7 @@ dir_filelist() { ${dep_list}header "$1" srcdir=$(echo "$1" | sed -e 's://*:/:g') - dirlist=$(find "${srcdir}" -printf "%p %m %U %G\n" | sort) + dirlist=$(find "${srcdir}" -printf "%p %m %U %G\n") # If $dirlist is only one line, then the directory is empty if [ "$(echo "${dirlist}" | wc -l)" -gt 1 ]; then -- 2.7.4