mtd: nand: move SCANLASTPAGE handling to the correct code block
authorBrian Norris <computersforpeace@gmail.com>
Sat, 21 Jan 2012 04:38:03 +0000 (20:38 -0800)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Mon, 26 Mar 2012 23:16:04 +0000 (00:16 +0100)
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@gmail.com>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
drivers/mtd/nand/nand_base.c

index c6603d4b25c8536efa9c8a44fed7e3aeb25393df..b90206613108844ad5da9252222ad36245f791d7 100644 (file)
@@ -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);