From patchwork Mon May 18 10:13:54 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: mtd_dataflash: unbreak erase support Date: Mon, 18 May 2009 00:13:54 -0000 From: David Woodhouse X-Patchwork-Id: 27351 Message-Id: <1242641634.30251.7.camel@macbook.infradead.org> To: torvalds@linux-foundation.org Cc: "Artem.Bityutskiy@nokia.com" , "linux-mtd@lists.infradead.org" , "stable@kernel.org" , "Woodhouse, David" From: Peter Korsgaard Commit 5b7f3a50 (fix dataflash 64-bit divisions) unfortunately introduced a typo. Erase addr and len were swapped in the pageaddr calculation, causing the wrong sectors to get erased. Signed-off-by: Peter Korsgaard Acked-by: Artem Bityutskiy Signed-off-by: David Woodhouse --- Resend with Artem's acked-by David, clear regression from 2.6.28, please send to Linus for 2.6.30 Please consider for 2.6.29-stable as well. drivers/mtd/devices/mtd_dataflash.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/mtd/devices/mtd_dataflash.c b/drivers/mtd/devices/mtd_dataflash.c index 62dee54..43976aa 100644 --- a/drivers/mtd/devices/mtd_dataflash.c +++ b/drivers/mtd/devices/mtd_dataflash.c @@ -178,7 +178,7 @@ static int dataflash_erase(struct mtd_info *mtd, struct erase_info *instr) /* Calculate flash page address; use block erase (for speed) if * we're at a block boundary and need to erase the whole block. */ - pageaddr = div_u64(instr->len, priv->page_size); + pageaddr = div_u64(instr->addr, priv->page_size); do_block = (pageaddr & 0x7) == 0 && instr->len >= blocksize; pageaddr = pageaddr << priv->page_offset;