diff -Nur linux-2.6.36.orig/drivers/mtd/Kconfig linux-2.6.36/drivers/mtd/Kconfig --- linux-2.6.36.orig/drivers/mtd/Kconfig 2010-10-20 22:30:22.000000000 +0200 +++ linux-2.6.36/drivers/mtd/Kconfig 2010-11-09 13:26:44.923745421 +0100 @@ -53,6 +53,11 @@ devices. Partitioning on NFTL 'devices' is a different - that's the 'normal' form of partitioning used on a block device. +config MTD_ROOTFS_ROOT_DEV + bool "Automatically set 'rootfs' partition to be root filesystem" + depends on MTD_PARTITIONS + default y + config MTD_REDBOOT_PARTS tristate "RedBoot partition table parsing" depends on MTD_PARTITIONS diff -Nur linux-2.6.36.orig/drivers/mtd/mtdpart.c linux-2.6.36/drivers/mtd/mtdpart.c --- linux-2.6.36.orig/drivers/mtd/mtdpart.c 2010-10-20 22:30:22.000000000 +0200 +++ linux-2.6.36/drivers/mtd/mtdpart.c 2010-11-09 13:27:26.703745576 +0100 @@ -29,6 +29,7 @@ #include #include #include +#include /* Our partition linked list */ static LIST_HEAD(mtd_partitions); @@ -46,7 +47,7 @@ * the pointer to that structure with this macro. */ #define PART(x) ((struct mtd_part *)(x)) - +#define IS_PART(mtd) (mtd->read == part_read) /* * MTD methods which simply translate the effective address and pass through @@ -539,14 +540,23 @@ { struct mtd_part *slave; uint64_t cur_offset = 0; - int i; + int i, j; printk(KERN_NOTICE "Creating %d MTD partitions on \"%s\":\n", nbparts, master->name); - for (i = 0; i < nbparts; i++) { - slave = add_one_partition(master, parts + i, i, cur_offset); + for (i = 0, j = 0; i < nbparts; i++) { + slave = add_one_partition(master, parts + i, j++, cur_offset); if (!slave) return -ENOMEM; + if (!strcmp(parts[i].name, "rootfs")) { +#ifdef CONFIG_MTD_ROOTFS_ROOT_DEV + if (ROOT_DEV == 0) { + printk(KERN_NOTICE "mtd: partition \"rootfs\" " + "set to be root filesystem\n"); + ROOT_DEV = MKDEV(MTD_BLOCK_MAJOR, slave->mtd.index); + } +#endif + } cur_offset = slave->offset + slave->mtd.size; }