kernel: mtdsplit: add missing digest field to Seama header
[openwrt/openwrt.git] / target / linux / generic / files / drivers / mtd / mtdsplit / mtdsplit_seama.c
index 228b8997ad7e09cd7c8a37638fbceb8750bdd816..ee0444a43e0c2a0c4c62b559a64b01ed5cd6a1bc 100644 (file)
@@ -26,6 +26,7 @@ struct seama_header {
        __be16  reserved;       /* reserved for  */
        __be16  metasize;       /* size of the META data */
        __be32  size;           /* size of the image */
        __be16  reserved;       /* reserved for  */
        __be16  metasize;       /* size of the META data */
        __be32  size;           /* size of the image */
+       u8      md5[16];        /* digest */
 };
 
 static int mtdsplit_parse_seama(struct mtd_info *master,
 };
 
 static int mtdsplit_parse_seama(struct mtd_info *master,
@@ -36,6 +37,7 @@ static int mtdsplit_parse_seama(struct mtd_info *master,
        size_t hdr_len, retlen, kernel_ent_size;
        size_t rootfs_offset;
        struct mtd_partition *parts;
        size_t hdr_len, retlen, kernel_ent_size;
        size_t rootfs_offset;
        struct mtd_partition *parts;
+       enum mtdsplit_part_type type;
        int err;
 
        hdr_len = sizeof(hdr);
        int err;
 
        hdr_len = sizeof(hdr);
@@ -56,7 +58,7 @@ static int mtdsplit_parse_seama(struct mtd_info *master,
                return -EINVAL;
 
        /* Check for the rootfs right after Seama entity with a kernel. */
                return -EINVAL;
 
        /* Check for the rootfs right after Seama entity with a kernel. */
-       err = mtd_check_rootfs_magic(master, kernel_ent_size, NULL);
+       err = mtd_check_rootfs_magic(master, kernel_ent_size, &type);
        if (!err) {
                rootfs_offset = kernel_ent_size;
        } else {
        if (!err) {
                rootfs_offset = kernel_ent_size;
        } else {
@@ -67,7 +69,7 @@ static int mtdsplit_parse_seama(struct mtd_info *master,
                 * Start the search from an arbitrary offset.
                 */
                err = mtd_find_rootfs_from(master, SEAMA_MIN_ROOTFS_OFFS,
                 * Start the search from an arbitrary offset.
                 */
                err = mtd_find_rootfs_from(master, SEAMA_MIN_ROOTFS_OFFS,
-                                          master->size, &rootfs_offset, NULL);
+                                          master->size, &rootfs_offset, &type);
                if (err)
                        return err;
        }
                if (err)
                        return err;
        }
@@ -80,7 +82,10 @@ static int mtdsplit_parse_seama(struct mtd_info *master,
        parts[0].offset = 0;
        parts[0].size = rootfs_offset;
 
        parts[0].offset = 0;
        parts[0].size = rootfs_offset;
 
-       parts[1].name = ROOTFS_PART_NAME;
+       if (type == MTDSPLIT_PART_TYPE_UBI)
+               parts[1].name = UBI_PART_NAME;
+       else
+               parts[1].name = ROOTFS_PART_NAME;
        parts[1].offset = rootfs_offset;
        parts[1].size = master->size - rootfs_offset;
 
        parts[1].offset = rootfs_offset;
        parts[1].size = master->size - rootfs_offset;