Re: [PATCH] initramfs: Support initrd that is bigger then 2G.

H. Peter Anvin
2014-06-20T04:30:11Z

On 06/19/2014 07:12 PM, Yinghai Lu wrote:
> When initrd (compressed or not) is used, kernel report data corrupted
> with /dev/ram0.
>
> The root cause:
> During initramfs checking, if it is initrd, it will be transferred to
> /initrd.image with sys_write.
> sys_write only support 2G-4K write, so if the initrd ram is more than
> that, /initrd.image will not complete at all.
>
> Add local sys_write_large to loop calling sys_write to workaround the
> problem.
>
> Also need to use that in write_buffer path for cpio that have file is
> more than file.

That sentence doesn't make sense.

> At the same time, we don't need to worry about sys_read/sys_write in
> do_mounts_rd.c::crd_load. As decompressor will have fill/flush that
> means it will allocate buffer and buffer is smaller than 2G.
>
> Test with uncompressed initrd, and compressed with gz, bz2, lzma,xz,
> lzop.
>
> Signed-off-by: Yinghai Lu <yinghai@kernel.org>

I would call this function xwrite(), which is usually called in userspace.

It would be nice in order to support very large initrd/initramfs, to
free the memory as it becomes available instead of requiring two copies
of the data in memory at the same time.

Otherwise,

Acked-by: H. Peter Anvin <hpa@zytor.com>

-hpa