70 lines
1.7 KiB
Diff
70 lines
1.7 KiB
Diff
--- 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
|