[PATCH] [MTD] Correct partition failed erase address

Adrian Hunter ext-adrian.hunter at nokia.com
Thu Mar 8 05:20:12 EST 2007


If an erase operation fails, the address at which the
failure occurred is returned by the driver.  The MTD
partition must adjust this address (by subtracting the
partition offset) before returning to the caller.
This was not happening, which caused JFFS2 to mark
the wrong block bad!

Signed-off-by: Adrian Hunter <ext-adrian.hunter at nokia.com>
---
 drivers/mtd/mtdpart.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c
index 633def3..476fbb6 100644
--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
@@ -200,6 +200,11 @@ static int part_erase (struct mtd_info *
 		return -EINVAL;
 	instr->addr += part->offset;
 	ret = part->master->erase(part->master, instr);
+	if (ret) {
+		if (instr->fail_addr != 0xffffffff)
+			instr->fail_addr -= part->offset;
+		instr->addr -= part->offset;
+	}
 	return ret;
 }
 
@@ -559,4 +564,3 @@ EXPORT_SYMBOL_GPL(deregister_mtd_parser)
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Nicolas Pitre <nico at cam.org>");
 MODULE_DESCRIPTION("Generic support for partitioning of MTD devices");
-
-- 
1.4.3





More information about the linux-mtd mailing list