From: Julian Stecklina <julian.steckl...@cyberus-technology.de> Port romfs from to the new initrd_fs_detect API. There are no functional changes.
Signed-off-by: Julian Stecklina <julian.steckl...@cyberus-technology.de> --- fs/romfs/Makefile | 4 ++++ fs/romfs/initrd.c | 22 ++++++++++++++++++++++ init/do_mounts_rd.c | 14 -------------- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/fs/romfs/Makefile b/fs/romfs/Makefile index 844928f1571160abed9d5aff54152b5508eaf7be..eb15dc3a78721d7f650560a404a92706260e9b63 100644 --- a/fs/romfs/Makefile +++ b/fs/romfs/Makefile @@ -11,3 +11,7 @@ ifneq ($(CONFIG_MMU),y) romfs-$(CONFIG_ROMFS_ON_MTD) += mmap-nommu.o endif +# If we are built-in, we provide support for romfs on initrds. +ifeq ($(CONFIG_ROMFS_FS),y) +romfs-y += initrd.o +endif diff --git a/fs/romfs/initrd.c b/fs/romfs/initrd.c new file mode 100644 index 0000000000000000000000000000000000000000..0ec7b4c9d1f79fac892b7fb1d8e17122092008a8 --- /dev/null +++ b/fs/romfs/initrd.c @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include <linux/fs.h> +#include <linux/initrd.h> +#include <linux/magic.h> +#include <linux/romfs_fs.h> + +static size_t __init detect_romfs(void *block_data) +{ + struct romfs_super_block *romfsb + = (struct romfs_super_block *)block_data; + BUILD_BUG_ON(sizeof(*romfsb) > BLOCK_SIZE); + + /* The definitions of ROMSB_WORD* already handle endianness. */ + if (romfsb->word0 != ROMSB_WORD0 || + romfsb->word1 != ROMSB_WORD1) + return 0; + + return be32_to_cpu(romfsb->size); +} + +initrd_fs_detect(detect_romfs, 0); diff --git a/init/do_mounts_rd.c b/init/do_mounts_rd.c index cdc39baaf3a1a65daad5fe6571a82faf3fc95b62..9f9a04cce505e532d444e2aef77037bc2b01da08 100644 --- a/init/do_mounts_rd.c +++ b/init/do_mounts_rd.c @@ -2,7 +2,6 @@ #include <linux/kernel.h> #include <linux/fs.h> #include <linux/ext2_fs.h> -#include <linux/romfs_fs.h> #include <linux/initrd.h> #include <linux/string.h> @@ -42,7 +41,6 @@ static int __init crd_load(decompress_fn deco); * * We currently check for the following magic numbers: * ext2 - * romfs * squashfs * gzip * bzip2 @@ -56,7 +54,6 @@ identify_ramdisk_image(struct file *file, loff_t pos, decompress_fn *decompressor) { const int size = BLOCK_SIZE; - struct romfs_super_block *romfsb; struct squashfs_super_block *squashfsb; int nblocks = -1; @@ -70,7 +67,6 @@ identify_ramdisk_image(struct file *file, loff_t pos, if (!buf) return -ENOMEM; - romfsb = (struct romfs_super_block *) buf; squashfsb = (struct squashfs_super_block *) buf; memset(buf, 0xe5, size); @@ -92,16 +88,6 @@ identify_ramdisk_image(struct file *file, loff_t pos, goto done; } - /* romfs is at block zero too */ - if (romfsb->word0 == ROMSB_WORD0 && - romfsb->word1 == ROMSB_WORD1) { - printk(KERN_NOTICE - "RAMDISK: romfs filesystem found at block %d\n", - start_block); - nblocks = (ntohl(romfsb->size)+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS; - goto done; - } - /* squashfs is at block zero too */ if (le32_to_cpu(squashfsb->s_magic) == SQUASHFS_MAGIC) { printk(KERN_NOTICE -- 2.47.0