mtd: nand: move SCANLASTPAGE handling to the correct code block

Linux-MTD Mailing List linux-mtd at lists.infradead.org
Mon Mar 26 20:59:04 EDT 2012


Gitweb:     http://git.infradead.org/?p=mtd-2.6.git;a=commit;h=df698621a5b39ced5ce527444cafd50c6fdc186d
Commit:     df698621a5b39ced5ce527444cafd50c6fdc186d
Parent:     f0e0c09b88b23ec418c065739096e198e8d6be22
Author:     Brian Norris <computersforpeace at gmail.com>
AuthorDate: Fri Jan 20 20:38:03 2012 -0800
Committer:  David Woodhouse <David.Woodhouse at intel.com>
CommitDate: Tue Mar 27 00:16:04 2012 +0100

    mtd: nand: move SCANLASTPAGE handling to the correct code block
    
    As nand_default_block_markbad() is becoming more complex, it helps to
    have code appear only in its relevant codepath(s). Here, the calculation
    of `ofs' based on NAND_BBT_SCANLASTPAGE is only useful on paths where we
    write bad block markers to OOB. We move the condition/calculation closer
    to the `write' operation and update the comment to more correctly
    describe the operation.
    
    The variable `wr_ofs' is also used to help isolate our calculation of
    the "write" offset from the usage of `ofs' to represent the eraseblock
    offset. This will become useful when we reorder operations in the next
    patch.
    
    This patch should make no functional change.
    
    Signed-off-by: Brian Norris <computersforpeace at gmail.com>
    Signed-off-by: Artem Bityutskiy <artem.bityutskiy at linux.intel.com>
    Signed-off-by: David Woodhouse <David.Woodhouse at intel.com>
---
 drivers/mtd/nand/nand_base.c |   13 +++++++------
 1 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index c6603d4..b902066 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -411,9 +411,6 @@ static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
 		nand_erase_nand(mtd, &einfo, 0);
 	}
 
-	if (chip->bbt_options & NAND_BBT_SCANLASTPAGE)
-		ofs += mtd->erasesize - mtd->writesize;
-
 	/* Get block number */
 	block = (int)(ofs >> chip->bbt_erase_shift);
 	if (chip->bbt)
@@ -424,11 +421,12 @@ static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
 		ret = nand_update_bbt(mtd, ofs);
 	else {
 		struct mtd_oob_ops ops;
+		loff_t wr_ofs = ofs;
 
 		nand_get_device(chip, mtd, FL_WRITING);
 
 		/*
-		 * Write to first two pages if necessary. If we write to more
+		 * Write to first/last page(s) if necessary. If we write to more
 		 * than one location, the first error encountered quits the
 		 * procedure.
 		 */
@@ -442,11 +440,14 @@ static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
 			ops.len = ops.ooblen = 1;
 		}
 		ops.mode = MTD_OPS_PLACE_OOB;
+
+		if (chip->bbt_options & NAND_BBT_SCANLASTPAGE)
+			wr_ofs += mtd->erasesize - mtd->writesize;
 		do {
-			ret = nand_do_write_oob(mtd, ofs, &ops);
+			ret = nand_do_write_oob(mtd, wr_ofs, &ops);
 
 			i++;
-			ofs += mtd->writesize;
+			wr_ofs += mtd->writesize;
 		} while (!ret && (chip->bbt_options & NAND_BBT_SCAN2NDPAGE) &&
 				i < 2);
 



More information about the linux-mtd-cvs mailing list