kernel/3.1[02]: add Winbond W25X05 SPI flash support
[openwrt.git] / target / linux / generic / patches-3.12 / 404-mtd-use-mtd_get_squashfs_len-in-split_squasfh.patch
1 --- a/drivers/mtd/mtdpart.c
2 +++ b/drivers/mtd/mtdpart.c
3 @@ -33,6 +33,7 @@
4  #include <linux/err.h>
5  
6  #include "mtdcore.h"
7 +#include "mtdsplit.h"
8  
9  /* Our partition linked list */
10  static LIST_HEAD(mtd_partitions);
11 @@ -669,43 +670,16 @@ mtd_pad_erasesize(struct mtd_info *mtd,
12         return len;
13  }
14  
15 -#define ROOTFS_SPLIT_NAME "rootfs_data"
16 -
17 -struct squashfs_super_block {
18 -       __le32 s_magic;
19 -       __le32 pad0[9];
20 -       __le64 bytes_used;
21 -};
22 -
23 -
24  static int split_squashfs(struct mtd_info *master, int offset, int *split_offset)
25  {
26 -       struct squashfs_super_block sb;
27 +       size_t squashfs_len;
28         int len, ret;
29  
30 -       ret = mtd_read(master, offset, sizeof(sb), &len, (void *) &sb);
31 -       if (ret || (len != sizeof(sb))) {
32 -               printk(KERN_ALERT "split_squashfs: error occured while reading "
33 -                       "from \"%s\"\n", master->name);
34 -               return -EINVAL;
35 -       }
36 -
37 -       if (SQUASHFS_MAGIC != le32_to_cpu(sb.s_magic) ) {
38 -               printk(KERN_ALERT "split_squashfs: no squashfs found in \"%s\"\n",
39 -                       master->name);
40 -               *split_offset = 0;
41 -               return 0;
42 -       }
43 -
44 -       if (le64_to_cpu((sb.bytes_used)) <= 0) {
45 -               printk(KERN_ALERT "split_squashfs: squashfs is empty in \"%s\"\n",
46 -                       master->name);
47 -               *split_offset = 0;
48 -               return 0;
49 -       }
50 +       ret = mtd_get_squashfs_len(master, offset, &squashfs_len);
51 +       if (ret)
52 +               return ret;
53  
54 -       len = (u32) le64_to_cpu(sb.bytes_used);
55 -       len = mtd_pad_erasesize(master, offset, len);
56 +       len = mtd_pad_erasesize(master, offset, squashfs_len);
57         *split_offset = offset + len;
58  
59         return 0;
60 --- a/drivers/mtd/Kconfig
61 +++ b/drivers/mtd/Kconfig
62 @@ -20,6 +20,7 @@ config MTD_ROOTFS_ROOT_DEV
63  
64  config MTD_ROOTFS_SPLIT
65         bool "Automatically split 'rootfs' partition for squashfs"
66 +       select MTD_SPLIT
67         default y
68  
69  config MTD_SPLIT_FIRMWARE