source: trunk/target/linux/atheros/patches-2.6.36/140-redboot_partition_scan.patch @ 23454

Last change on this file since 23454 was 23454, checked in by acoul, 6 years ago

linux/atheros: add preliminary 2.6.36 kernel support (refresh patches)

File size: 1.5 KB
  • drivers/mtd/redboot.c

    a b static int parse_redboot_partitions(stru 
    7878        static char nullstring[] = "unallocated"; 
    7979#endif 
    8080 
     81        buf = vmalloc(master->erasesize); 
     82        if (!buf) 
     83                return -ENOMEM; 
     84 
     85 restart: 
    8186        if ( directory < 0 ) { 
    8287                offset = master->size + directory * master->erasesize; 
    83                 while (master->block_isbad &&  
     88                while (master->block_isbad && 
    8489                       master->block_isbad(master, offset)) { 
    8590                        if (!offset) { 
    8691                        nogood: 
    8792                                printk(KERN_NOTICE "Failed to find a non-bad block to check for RedBoot partition table\n"); 
     93                                vfree(buf); 
    8894                                return -EIO; 
    8995                        } 
    9096                        offset -= master->erasesize; 
    9197                } 
    9298        } else { 
    9399                offset = directory * master->erasesize; 
    94                 while (master->block_isbad &&  
     100                while (master->block_isbad && 
    95101                       master->block_isbad(master, offset)) { 
    96102                        offset += master->erasesize; 
    97103                        if (offset == master->size) 
    98104                                goto nogood; 
    99105                } 
    100106        } 
    101         buf = vmalloc(master->erasesize); 
    102  
    103         if (!buf) 
    104                 return -ENOMEM; 
    105  
    106107        printk(KERN_NOTICE "Searching for RedBoot partition table in %s at offset 0x%lx\n", 
    107108               master->name, offset); 
    108109 
    static int parse_redboot_partitions(stru 
    174175        } 
    175176        if (i == numslots) { 
    176177                /* Didn't find it */ 
     178                if (offset + master->erasesize < master->size) { 
     179                        /* not at the end of the flash yet, maybe next block :) */ 
     180                        directory++; 
     181                        goto restart; 
     182                } 
    177183                printk(KERN_NOTICE "No RedBoot partition table detected in %s\n", 
    178184                       master->name); 
    179185                ret = 0; 
Note: See TracBrowser for help on using the repository browser.