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
 |