Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3c441baa authored by David Woodhouse's avatar David Woodhouse
Browse files

[MTD] Skip bad blocks when checking for RedBoot partition table

parent 9c37f332
Loading
Loading
Loading
Loading
+20 −5
Original line number Diff line number Diff line
@@ -59,16 +59,31 @@ static int parse_redboot_partitions(struct mtd_info *master,
	static char nullstring[] = "unallocated";
#endif

	if ( directory < 0 ) {
		offset = master->size + directory * master->erasesize;
		while (master->block_isbad && 
		       master->block_isbad(master, offset)) {
			if (!offset) {
			nogood:
				printk(KERN_NOTICE "Failed to find a non-bad block to check for RedBoot partition table\n");
				return -EIO;
			}
			offset -= master->erasesize;
		}
	} else {
		offset = directory * master->erasesize;
		while (master->block_isbad && 
		       master->block_isbad(master, offset)) {
			offset += master->erasesize;
			if (offset == master->size)
				goto nogood;
		}
	}
	buf = vmalloc(master->erasesize);

	if (!buf)
		return -ENOMEM;

	if ( directory < 0 )
		offset = master->size + directory*master->erasesize;
	else
		offset = directory*master->erasesize;

	printk(KERN_NOTICE "Searching for RedBoot partition table in %s at offset 0x%lx\n",
	       master->name, offset);