[PATCH 00/14] mtd: nand: improve flash-based BBT robustness

Brian Norris computersforpeace at gmail.com
Wed Sep 7 16:13:27 EDT 2011


Hello,

This patch series aims to improve the robustness of flash-based bad
block tables, especially their ECC handling. In fact, most of the
patches simply build up to the changes in patch 9 and 10, with some
following bugfixes and improvements that were discovered as a result of
the optimizations.

It's worth noting here the intended block scrubbing policy so that it
can be checked for soundness and for implementation:

*) a BBT page with uncorrected ECC errors is invalid
*) a BBT page with corrected ECC errors is valid but needs scrubbing
   (erased and rewritten with corrected data)

Upon discovering invalid table page(s), we retry our table versioning in
this order:

(1) Mirrored table of same version
(2) Mirrored table of lesser version
(3) Rescan flash for bad blocks

After yielding the most up-to-date table (from table in flash or from
scanning the device), then if the flash-BBT is out of date or needs
scrubbing, the table should be rewritten.

Let me know how any of this works and if there are particular areas
where documentation or explanation is lacking.

Brian

Brian Norris (14):
  mtd: nand: refactor scanning code
  mtd: nand: do not ignore all ECC errors
  mtd: define `is_ecc_error()' macros
  mtd: utilize `is_ecc_error()' macros
  mtd: nand: remove unnecessary variable
  mtd: nand: fix style
  mtd: nand: begin restructuring check_create
  mtd: nand: remove gotos in `check_create()'
  mtd: nand: report ECC errors properly when reading BBT
  mtd: nand: scrub BBT on ECC errors
  mtd: nand: wait to set BBT version
  mtd: nand: do not scan bad blocks with NAND_BBT_NO_OOB set
  mtd: nand: invalidate cache on unaligned reads
  mtd: nand: switch `check_pattern()' to standard `memcmp()'

 drivers/mtd/inftlcore.c             |    4 +-
 drivers/mtd/mtdchar.c               |    4 +-
 drivers/mtd/mtdconcat.c             |    8 +-
 drivers/mtd/mtdoops.c               |    2 +-
 drivers/mtd/mtdpart.c               |    8 +-
 drivers/mtd/mtdswap.c               |   20 ++--
 drivers/mtd/nand/diskonchip.c       |    2 +-
 drivers/mtd/nand/nand_base.c        |   12 ++-
 drivers/mtd/nand/nand_bbt.c         |  198 ++++++++++++++++++-----------------
 drivers/mtd/nftlcore.c              |    4 +-
 drivers/mtd/onenand/onenand_base.c  |   11 +-
 drivers/mtd/sm_ftl.c                |    4 +-
 drivers/mtd/tests/mtd_pagetest.c    |   28 +++---
 drivers/mtd/tests/mtd_readtest.c    |    2 +-
 drivers/mtd/tests/mtd_speedtest.c   |    8 +-
 drivers/mtd/tests/mtd_stresstest.c  |    2 +-
 drivers/mtd/tests/mtd_subpagetest.c |    9 +-
 drivers/mtd/tests/mtd_torturetest.c |    2 +-
 drivers/mtd/ubi/eba.c               |    2 +-
 drivers/mtd/ubi/io.c                |   27 +++--
 drivers/mtd/ubi/kapi.c              |    3 +-
 drivers/mtd/ubi/misc.c              |    2 +-
 drivers/mtd/ubi/scan.c              |    4 +-
 drivers/mtd/ubi/vtbl.c              |    2 +-
 include/linux/mtd/mtd.h             |    5 +
 25 files changed, 198 insertions(+), 175 deletions(-)

-- 
1.7.5.4





More information about the linux-mtd mailing list