-Index: linux/drivers/mtd/Kconfig
+Index: linux-2.6.21.7/drivers/mtd/Kconfig
===================================================================
---- linux.orig/drivers/mtd/Kconfig
-+++ linux/drivers/mtd/Kconfig
+--- linux-2.6.21.7.orig/drivers/mtd/Kconfig
++++ linux-2.6.21.7/drivers/mtd/Kconfig
@@ -49,6 +49,16 @@ config MTD_PARTITIONS
devices. Partitioning on NFTL 'devices' is a different - that's the
'normal' form of partitioning used on a block device.
config MTD_REDBOOT_PARTS
tristate "RedBoot partition table parsing"
depends on MTD_PARTITIONS
-Index: linux/drivers/mtd/mtdpart.c
+Index: linux-2.6.21.7/drivers/mtd/mtdpart.c
===================================================================
---- linux.orig/drivers/mtd/mtdpart.c
-+++ linux/drivers/mtd/mtdpart.c
+--- linux-2.6.21.7.orig/drivers/mtd/mtdpart.c
++++ linux-2.6.21.7/drivers/mtd/mtdpart.c
@@ -20,6 +20,8 @@
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
+ goto out;
+ }
+
-+ part->name = (unsigned char *)&part[1];
+ memcpy(part, old, sizeof(*part));
++ part->name = (unsigned char *)&part[1];
+ strcpy(part->name, ROOTFS_SPLIT_NAME);
+
+ len = (u32) sb->bytes_used;
+ if (dpart == NULL)
+ return 1;
+
-+ printk(KERN_INFO "mtd: \"%s\" created, ofs=%lX, len=%lX \n",
++ printk(KERN_INFO "mtd: partition \"%s\" created automatically, ofs=%X, len=%X \n",
+ ROOTFS_SPLIT_NAME, dpart->offset, dpart->size);
+
+ ret = add_one_partition(master, dpart, index, NULL);
- offs += slave->mtd.erasesize;
+ for (i = 0, j = 0; i < nbparts; i++) {
+ part = (struct mtd_partition *) &parts[i];
-+ ret = add_one_partition(master, part, i, &slave);
++ ret = add_one_partition(master, part, j, &slave);
+ if (ret)
+ return ret;
+ j++;