From: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
To: linux-kernel@vger.kernel.org
Cc: "Andrzej Pietrasiewicz" <andrzej.p@samsung.com>,
"Michael Forney" <forney@google.com>,
"Masahiro Yamada" <yamada.masahiro@socionext.com>,
"Bjørn Forsman" <bjorn.forsman@gmail.com>
Subject: [PATCH] Revert "kbuild: create deterministic initramfs directory listings"
Date: Thu, 16 Aug 2018 18:18:17 +0200 [thread overview]
Message-ID: <20180816161817.12267-1-andrzej.p@samsung.com> (raw)
In-Reply-To: CGME20180816161825eucas1p11be9cea5d622b905154590bae90a47a4@eucas1p1.samsung.com
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 <andrzej.p@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
next parent reply other threads:[~2018-08-16 16:18 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20180816161825eucas1p11be9cea5d622b905154590bae90a47a4@eucas1p1.samsung.com>
2018-08-16 16:18 ` Andrzej Pietrasiewicz [this message]
2018-08-16 23:34 ` [PATCH] Revert "kbuild: create deterministic initramfs directory listings" Bjørn Forsman
2018-08-17 7:47 ` Andrzej Pietrasiewicz
2018-08-17 8:14 ` Masahiro Yamada
[not found] ` <CGME20180817120447eucas1p1dde0176cf7d824e8a42e2d39ac5531f9@eucas1p1.samsung.com>
2018-08-17 12:03 ` [PATCH] kbuild: make sorting initramfs contents independent of locale Andrzej Pietrasiewicz
2018-08-20 15:03 ` Masahiro Yamada
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180816161817.12267-1-andrzej.p@samsung.com \
--to=andrzej.p@samsung.com \
--cc=bjorn.forsman@gmail.com \
--cc=forney@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=yamada.masahiro@socionext.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).