X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/27c303501e47f15ba64569c28b1a1a125ba1714b..40b344028b6b043b73512f036be7b3e963f85c88:/target/linux/generic-2.6/patches-2.6.30/065-rootfs_split.patch diff --git a/target/linux/generic-2.6/patches-2.6.30/065-rootfs_split.patch b/target/linux/generic-2.6/patches-2.6.30/065-rootfs_split.patch index 0eca8990b..34c1f5add 100644 --- a/target/linux/generic-2.6/patches-2.6.30/065-rootfs_split.patch +++ b/target/linux/generic-2.6/patches-2.6.30/065-rootfs_split.patch @@ -37,7 +37,7 @@ /* * MTD methods which simply translate the effective address and pass through -@@ -512,6 +514,156 @@ out_register: +@@ -512,6 +514,155 @@ out_register: return slave; } @@ -54,32 +54,31 @@ + +static int split_squashfs(struct mtd_info *master, int offset, int *split_offset) +{ -+ char buf[512]; -+ struct squashfs_super_block *sb = (struct squashfs_super_block *) buf; ++ struct squashfs_super_block sb; + int len, ret; + -+ ret = master->read(master, offset, sizeof(*sb), &len, buf); -+ if (ret || (len != sizeof(*sb))) { ++ ret = master->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 (*((u32 *) buf) != SQUASHFS_MAGIC) { ++ 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 (sb->bytes_used <= 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; + } + -+ len = (u32) sb->bytes_used; ++ len = (u32) le64_to_cpu(sb.bytes_used); + len += (offset & 0x000fffff); + len += (master->erasesize - 1); + len &= ~(master->erasesize - 1); @@ -194,7 +193,7 @@ /* * This function, given a master MTD object and a partition table, creates * and registers slave MTD objects which are bound to the master according to -@@ -527,14 +679,29 @@ int add_mtd_partitions(struct mtd_info * +@@ -527,14 +678,29 @@ int add_mtd_partitions(struct mtd_info * { struct mtd_part *slave; uint64_t cur_offset = 0; @@ -227,7 +226,7 @@ cur_offset = slave->offset + slave->mtd.size; } -@@ -542,6 +709,32 @@ int add_mtd_partitions(struct mtd_info * +@@ -542,6 +708,32 @@ int add_mtd_partitions(struct mtd_info * } EXPORT_SYMBOL(add_mtd_partitions); @@ -442,7 +441,7 @@ if (devt) { bdev = open_by_devnum(devt, FMODE_WRITE | FMODE_READ); } -@@ -263,17 +276,97 @@ static struct block2mtd_dev *add_device( +@@ -263,17 +276,98 @@ static struct block2mtd_dev *add_device( #endif if (IS_ERR(bdev)) { @@ -506,9 +505,10 @@ + bdev = open_by_devnum(devt, FMODE_WRITE | FMODE_READ); + if (!bdev || !bdev->bd_disk) + err = -EINVAL; -+ else { ++#ifndef CONFIG_MTD_BLOCK2MTD_MODULE ++ else + err = rescan_partitions(bdev->bd_disk, bdev); -+ } ++#endif + if (bdev) + close_bdev_exclusive(bdev, FMODE_READ|FMODE_WRITE); + @@ -543,7 +543,7 @@ if (!mtdname) mtdname = devname; -@@ -297,6 +390,7 @@ static struct block2mtd_dev *add_device( +@@ -297,6 +391,7 @@ static struct block2mtd_dev *add_device( dev->mtd.read = block2mtd_read; dev->mtd.priv = dev; dev->mtd.owner = THIS_MODULE;