diff -Nur linux-2.6.31.4.orig/drivers/mtd/Kconfig linux-2.6.31.4/drivers/mtd/Kconfig --- linux-2.6.31.4.orig/drivers/mtd/Kconfig 2009-10-12 22:15:40.000000000 +0200 +++ linux-2.6.31.4/drivers/mtd/Kconfig 2009-10-21 11:45:10.557679089 +0200 @@ -53,6 +53,11 @@ should normally be compiled as kernel modules. The modules perform various checks and verifications when loaded. +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.31.4.orig/drivers/mtd/mtdpart.c linux-2.6.31.4/drivers/mtd/mtdpart.c --- linux-2.6.31.4.orig/drivers/mtd/mtdpart.c 2009-10-12 22:15:40.000000000 +0200 +++ linux-2.6.31.4/drivers/mtd/mtdpart.c 2009-10-21 11:46:39.593679219 +0200 @@ -18,6 +18,7 @@ #include #include #include +#include /* Our partition linked list */ static LIST_HEAD(mtd_partitions); @@ -35,7 +36,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 @@ -517,14 +518,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; }