Re: [PATCH] init: open /initrd.image with O_LARGEFILE

From: John Sperbeck
Date: Mon Mar 18 2024 - 15:02:30 EST


On Sun, Mar 17, 2024 at 4:47 PM Randy Dunlap <rdunlap@xxxxxxxxxxxxx> wrote:
>
> Hi,
>
> On 3/17/24 15:15, John Sperbeck wrote:
> > If initrd data is larger than 2Gb, we'll eventually fail to write to
> > the /initrd.image file when we hit that limit, unless O_LARGEFILE is set.
> >
>
> Could this be related to
> https://lore.kernel.org/lkml/CAHY78BqCpMQptPN0SMaXuRqHOhYi+wnMEUSTYt7OHDZih4e7yQ@xxxxxxxxxxxxxx/
> ?
>
> Thanks.
>

I think there's a separate problem that this patch doesn't address.
If an individual component of a CPIO file is larger than 2Gb, then
there will be an EFBIG error when processing it. The backtrace where
this occurs would be:

generic_write_checks_count
generic_write_checks
generic_file_write_iter
__kernel_write_iter
kernel_write
xwrite
do_copy
unpack_to_rootfs
do_populate_rootfs
async_run_entry_fn
process_scheduled_works
worker_thread
kthread
ret_from_fork
ret_from_fork_asm

I think that could be dealt with by a patch to add O_LARGEFILE to
'openflags' in initramfs:do_name().