--- a/drivers/mtd/mtdpart.c +++ b/drivers/mtd/mtdpart.c @@ -33,6 +33,7 @@ #include #include "mtdcore.h" +#include "mtdsplit.h" /* Our partition linked list */ static LIST_HEAD(mtd_partitions); @@ -668,43 +669,16 @@ mtd_pad_erasesize(struct mtd_info *mtd, return len; } -#define ROOTFS_SPLIT_NAME "rootfs_data" - -struct squashfs_super_block { - __le32 s_magic; - __le32 pad0[9]; - __le64 bytes_used; -}; - - static int split_squashfs(struct mtd_info *master, int offset, int *split_offset) { - struct squashfs_super_block sb; + size_t squashfs_len; int len, ret; - ret = mtd_read(master, offset, sizeof(sb), &len, (void *) &sb); - if (ret || (len != sizeof(sb))) { - printk(KERN_ALERT "split_squashfs: error occured while reading " - "from \"%s\"\n", master->name); - return -EINVAL; - } - - if (SQUASHFS_MAGIC != le32_to_cpu(sb.s_magic) ) { - printk(KERN_ALERT "split_squashfs: no squashfs found in \"%s\"\n", - master->name); - *split_offset = 0; - return 0; - } - - if (le64_to_cpu((sb.bytes_used)) <= 0) { - printk(KERN_ALERT "split_squashfs: squashfs is empty in \"%s\"\n", - master->name); - *split_offset = 0; - return 0; - } + ret = mtd_get_squashfs_len(master, offset, &squashfs_len); + if (ret) + return ret; - len = (u32) le64_to_cpu(sb.bytes_used); - len = mtd_pad_erasesize(master, offset, len); + len = mtd_pad_erasesize(master, offset, squashfs_len); *split_offset = offset + len; return 0; --- a/drivers/mtd/Kconfig +++ b/drivers/mtd/Kconfig @@ -20,6 +20,7 @@ config MTD_ROOTFS_ROOT_DEV config MTD_ROOTFS_SPLIT bool "Automatically split 'rootfs' partition for squashfs" + select MTD_SPLIT default y config MTD_SPLIT_FIRMWARE