|
|
@@ -0,0 +1,69 @@
|
|
|
+--- a/drivers/mtd/mtdpart.c
|
|
|
++++ b/drivers/mtd/mtdpart.c
|
|
|
+@@ -34,6 +34,7 @@
|
|
|
+ #include <linux/err.h>
|
|
|
+
|
|
|
+ #include "mtdcore.h"
|
|
|
++#include "mtdsplit.h"
|
|
|
+
|
|
|
+ /* Our partition linked list */
|
|
|
+ static LIST_HEAD(mtd_partitions);
|
|
|
+@@ -669,43 +670,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
|