From: Julian Stecklina <julian.stecklina@xxxxxxxxxxxxxxxxxxxxx> Add erofs detection to the initrd mount code. This allows systems to boot from an erofs-based initrd in the same way as they can boot from a squashfs initrd. Just as squashfs initrds, erofs images as initrds are a good option for systems that are memory-constrained. Signed-off-by: Julian Stecklina <julian.stecklina@xxxxxxxxxxxxxxxxxxxxx> --- init/do_mounts_rd.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/init/do_mounts_rd.c b/init/do_mounts_rd.c index ac021ae6e6fa78c7b7828a78ab2fa3af3611bef3..7c3f8b45b5ed2eea3c534d7f2e65608542009df5 100644 --- a/init/do_mounts_rd.c +++ b/init/do_mounts_rd.c @@ -11,6 +11,7 @@ #include "do_mounts.h" #include "../fs/squashfs/squashfs_fs.h" +#include "../fs/erofs/erofs_fs.h" #include <linux/decompress/generic.h> @@ -47,6 +48,7 @@ static int __init crd_load(decompress_fn deco); * romfs * cramfs * squashfs + * erofs * gzip * bzip2 * lzma @@ -63,6 +65,7 @@ identify_ramdisk_image(struct file *file, loff_t pos, struct romfs_super_block *romfsb; struct cramfs_super *cramfsb; struct squashfs_super_block *squashfsb; + struct erofs_super_block *erofsb; int nblocks = -1; unsigned char *buf; const char *compress_name; @@ -77,6 +80,7 @@ identify_ramdisk_image(struct file *file, loff_t pos, romfsb = (struct romfs_super_block *) buf; cramfsb = (struct cramfs_super *) buf; squashfsb = (struct squashfs_super_block *) buf; + erofsb = (struct erofs_super_block *) buf; memset(buf, 0xe5, size); /* @@ -165,6 +169,21 @@ identify_ramdisk_image(struct file *file, loff_t pos, goto done; } + /* Try erofs */ + pos = (start_block * BLOCK_SIZE) + EROFS_SUPER_OFFSET; + kernel_read(file, buf, size, &pos); + + if (erofsb->magic == EROFS_SUPER_MAGIC_V1) { + printk(KERN_NOTICE + "RAMDISK: erofs filesystem found at block %d\n", + start_block); + + nblocks = ((erofsb->blocks << erofsb->blkszbits) + BLOCK_SIZE - 1) + >> BLOCK_SIZE_BITS; + + goto done; + } + printk(KERN_NOTICE "RAMDISK: Couldn't find valid RAM disk image starting at %d.\n", start_block); --- base-commit: 5fc31936081919a8572a3d644f3fbb258038f337 change-id: 20250320-initrd-erofs-76e925fdf68c Best regards, -- Julian Stecklina <julian.stecklina@xxxxxxxxxxxxxxxxxxxxx>