diff options
| author | Jan Hoffmann | 2025-07-20 17:07:29 +0000 |
|---|---|---|
| committer | Hauke Mehrtens | 2025-07-27 16:24:50 +0000 |
| commit | 6fa1775348d5415129db12c05a993c8571c867c2 (patch) | |
| tree | b0b8a3b3de8a8765feffd067dd1270a1e8e7b2ab | |
| parent | 4f716eb43a5b68dc4effdfad64a453b87821dd1b (diff) | |
| download | openwrt-6fa1775348d5415129db12c05a993c8571c867c2.tar.gz | |
kernel: mtdsplit_h3c_vfs: return 0 for non-fatal errors
Since Linux 6.7, introduced with commit 5c2f7727d437 ("mtd: mtdpart:
check for subpartitions parsing result"), errors during subpartition
parsing cause all MTD partitions to be torn down.
Since the current mtdsplit driver for devices using H3C VFS returns
-EINVAL if it does not find a file system containing an OpenWrt image,
this makes initial installation of OpenWrt impossible.
Work around this by returning 0 when the file system contains unexpected
data. Also print a message in this case to show what is going on.
Signed-off-by: Jan Hoffmann <jan@3e8.eu>
Link: https://github.com/openwrt/openwrt/pull/19475
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
| -rw-r--r-- | target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_h3c_vfs.c | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_h3c_vfs.c b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_h3c_vfs.c index f264233dbd..25993e762b 100644 --- a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_h3c_vfs.c +++ b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_h3c_vfs.c @@ -98,8 +98,11 @@ static int mtdsplit_h3c_vfs_parse(struct mtd_info *mtd, if (retlen != sizeof(format_flag)) return -EIO; - if (format_flag != FORMAT_FLAG) - return -EINVAL; + if (format_flag != FORMAT_FLAG) { + pr_info("mtdsplit_h3c_vfs: unexpected format flag %08x\n", + format_flag); + return 0; + } /* Check file entry */ err = mtd_read(mtd, FILE_ENTRY_OFFSET, sizeof(file_entry), &retlen, @@ -110,20 +113,14 @@ static int mtdsplit_h3c_vfs_parse(struct mtd_info *mtd, if (retlen != sizeof(file_entry)) return -EIO; - if (file_entry.flags != FILE_ENTRY_FLAGS) - return -EINVAL; - - if (file_entry.parent_block != FILE_ENTRY_PARENT_BLOCK) - return -EINVAL; - - if (file_entry.parent_index != FILE_ENTRY_PARENT_INDEX) - return -EINVAL; - - if (file_entry.data_block != FILE_ENTRY_DATA_BLOCK) - return -EINVAL; - - if (strncmp(file_entry.name, FILE_ENTRY_NAME, sizeof(file_entry.name)) != 0) - return -EINVAL; + if (file_entry.flags != FILE_ENTRY_FLAGS || + file_entry.parent_block != FILE_ENTRY_PARENT_BLOCK || + file_entry.parent_index != FILE_ENTRY_PARENT_INDEX || + file_entry.data_block != FILE_ENTRY_DATA_BLOCK || + strncmp(file_entry.name, FILE_ENTRY_NAME, sizeof(file_entry.name)) != 0) { + pr_info("mtdsplit_h3c_vfs: unexpected file entry - OpenWrt probably not installed\n"); + return 0; + } /* Find rootfs offset */ kernel_size = block_offset(file_entry.data_block + |