Re: [PATCH 1/1] initrd: use O_SYNC flag while opening /dev/ram for write

From: George Stark
Date: Tue Jul 09 2024 - 12:20:08 EST


Hello Christoph

Thanks for the review

On 7/9/24 09:03, Christoph Hellwig wrote:
On Mon, Jul 08, 2024 at 11:09:23PM +0300, George Stark wrote:
initrd image is written to the /dev/ram block device using filp_open(),
kernel_write()

First question: why are you using the legacy initrd and not initramfs?

I was playing around with initrd to have ability to mount initrd fs from disk after switching to main root and use files from it. We can't mount initramfs image. In embedded system mounting vs extracting makes a difference due to resource limitations. In the end we dropped that idea
partly because of initrd is marked as deprecated.
But since it has been deprecated since 2020 and it's still there I thought may be it was used by someone so this patch was worth publishing.

If initrd really counts its last days then this patch can be thrown away.


. After fput() /dev/ram is mounted and may fail due to not
all data is actually written to the device yet. The mount error remains
hidden due to MS_SILENT flag usage and mount_root_generic has retries.
So use O_SYNC flag to have all data written to /dev/ram before mounting.

O_SYNC is highly inefficient. If you have a valid reason to care about
a corner case in the hopefully soon to be remvoved legacy initrd code,
the right way to do this is a single fdatasync after the writes have
finished.

Ok.

--
Best regards
George