[generic]: add initial 3.13 support
[15.05/openwrt.git] / target / linux / generic / patches-3.13 / 404-mtd-use-mtd_get_squashfs_len-in-split_squasfh.patch
diff --git a/target/linux/generic/patches-3.13/404-mtd-use-mtd_get_squashfs_len-in-split_squasfh.patch b/target/linux/generic/patches-3.13/404-mtd-use-mtd_get_squashfs_len-in-split_squasfh.patch
new file mode 100644 (file)
index 0000000..a54b97b
--- /dev/null
@@ -0,0 +1,69 @@
+--- a/drivers/mtd/mtdpart.c
++++ b/drivers/mtd/mtdpart.c
+@@ -33,6 +33,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