--- zzzz-none-000/linux-4.9.276/init/do_mounts.c 2021-07-20 14:21:16.000000000 +0000 +++ falcon-5530-750/linux-4.9.276/init/do_mounts.c 2023-04-05 08:19:02.000000000 +0000 @@ -290,7 +290,7 @@ } EXPORT_SYMBOL_GPL(name_to_dev_t); -static int __init root_dev_setup(char *line) +int __init root_dev_setup(char *line) { strlcpy(saved_root_name, line, sizeof(saved_root_name)); return 1; @@ -438,7 +438,30 @@ out: put_page(page); } - + +#ifdef CONFIG_MTD_ROOTFS_ROOT_DEV +static int __init mount_ubi_rootfs(void) +{ + int flags = MS_SILENT; + int err, tried = 0; + + while (tried < 2) { + err = do_mount_root("ubi0:rootfs", "ubifs", flags, + root_mount_data); + switch (err) { + case -EACCES: + flags |= MS_RDONLY; + tried++; + break; + default: + return err; + } + } + + return -EINVAL; +} +#endif + #ifdef CONFIG_ROOT_NFS #define NFSROOT_TIMEOUT_MIN 5 @@ -532,6 +555,10 @@ change_floppy("root floppy"); } #endif +#ifdef CONFIG_MTD_ROOTFS_ROOT_DEV + if (!mount_ubi_rootfs()) + return; +#endif #ifdef CONFIG_BLOCK { int err = create_dev("/dev/root", ROOT_DEV);