OpenWrt – Rev 1

Subversion Repositories:
Rev:
--- a/drivers/mtd/bcm47xxpart.c
+++ b/drivers/mtd/bcm47xxpart.c
@@ -15,8 +15,12 @@
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 
-/* 10 parts were found on sflash on Netgear WNDR4500 */
-#define BCM47XXPART_MAX_PARTS          12
+/*
+ * NAND flash on Netgear R6250 was verified to contain 15 partitions.
+ * This will result in allocating too big array for some old devices, but the
+ * memory will be freed soon anyway (see mtd_device_parse_register).
+ */
+#define BCM47XXPART_MAX_PARTS          20
 
 /*
  * Amount of bytes we read when analyzing each block of flash memory.
@@ -168,18 +172,26 @@ static int bcm47xxpart_parse(struct mtd_
                                i++;
                        }
 
-                       bcm47xxpart_add_part(&parts[curr_part++], "linux",
-                                            offset + trx->offset[i], 0);
-                       i++;
+                       if (trx->offset[i]) {
+                               bcm47xxpart_add_part(&parts[curr_part++],
+                                                    "linux",
+                                                    offset + trx->offset[i],
+                                                    0);
+                               i++;
+                       }
 
                        /*
                         * Pure rootfs size is known and can be calculated as:
                         * trx->length - trx->offset[i]. We don't fill it as
                         * we want to have jffs2 (overlay) in the same mtd.
                         */
-                       bcm47xxpart_add_part(&parts[curr_part++], "rootfs",
-                                            offset + trx->offset[i], 0);
-                       i++;
+                       if (trx->offset[i]) {
+                               bcm47xxpart_add_part(&parts[curr_part++],
+                                                    "rootfs",
+                                                    offset + trx->offset[i],
+                                                    0);
+                               i++;
+                       }
 
                        last_trx_part = curr_part - 1;