linux/drivers/mtd
Brian Norris dadc17a3e3 mtd: nand: wait to set BBT version
Because there are so many cases of checking, writing, and re-writing of
the bad block table(s), we might as well wait until the we've settled on
a valid, clean copy of the table. This also prevents us from falsely
incrementing the table version. For example, we may have the following:

  Primary table, with version 0x02
  Mirror table, with version 0x01
  Primary table has uncorrectable ECC errors

If we don't have this fix applied, then we will:

  Choose to read the primary table (higher version)
  Set mirror table version to 0x02
  Read back primary table
  Invalidate table because of ECC errors
  Retry readback operation with mirror table, now version 0x02
  Mirrored table reads cleanly
  Writeback BBT to primary table location (with "version 0x02")

However, the mirrored table shouldn't have a new version number.
Instead, we actually want:

  Choose to read the primary table (higher version)
  Read back primary table
  Invalidate table because of ECC errors
  Retry readback with mirror table (version 0x01)
  Mirrored table reads cleanly
  Set both tables to version 0x01
  Writeback BBT to primary table location (version 0x01)

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
2011-09-21 09:19:08 +03:00
..
chips mtd: cleanup style on pr_debug messages 2011-09-11 15:02:16 +03:00
devices mtd: rename MTD_OOB_* to MTD_OPS_* 2011-09-11 15:28:59 +03:00
lpddr mtd: remove duplicate assignment of chip->state 2011-05-25 02:11:13 +01:00
maps mtd: drop Integrator flash map Kconfig 2011-09-11 16:35:47 +03:00
nand mtd: nand: wait to set BBT version 2011-09-21 09:19:08 +03:00
onenand mtd: utilize `mtd_is_*()' functions 2011-09-21 09:19:06 +03:00
tests mtd: utilize `mtd_is_*()' functions 2011-09-21 09:19:06 +03:00
ubi mtd: utilize `mtd_is_*()' functions 2011-09-21 09:19:06 +03:00
afs.c mtd: abstract last MTD partition parser argument 2011-09-11 15:02:10 +03:00
ar7part.c mtd: abstract last MTD partition parser argument 2011-09-11 15:02:10 +03:00
cmdlinepart.c mtd: abstract last MTD partition parser argument 2011-09-11 15:02:10 +03:00
ftl.c mtd: spelling fixes 2011-09-11 15:02:16 +03:00
inftlcore.c mtd: utilize `mtd_is_*()' functions 2011-09-21 09:19:06 +03:00
inftlmount.c mtd: spelling fixes 2011-09-11 15:02:16 +03:00
Kconfig mtd: remove CONFIG_MTD_DEBUG 2011-09-11 15:02:16 +03:00
Makefile mtd: make ofpart buildable as a separate module 2011-09-11 15:02:13 +03:00
mtd_blkdevs.c mtd: mtd_blkdevs: fix error path in blktrans_open 2011-05-25 01:53:45 +01:00
mtdblock_ro.c mtd: Update copyright notices 2010-08-08 20:58:20 +01:00
mtdblock.c mtd: replace DEBUG() with pr_debug() 2011-09-11 15:02:16 +03:00
mtdchar.c mtd: utilize `mtd_is_*()' functions 2011-09-21 09:19:06 +03:00
mtdconcat.c mtd: utilize `mtd_is_*()' functions 2011-09-21 09:19:06 +03:00
mtdcore.c mtd: check parts pointer before using it 2011-09-11 15:02:18 +03:00
mtdcore.h mtd: hide parse_mtd_partitions 2011-09-11 15:02:13 +03:00
mtdoops.c mtd: utilize `mtd_is_*()' functions 2011-09-21 09:19:06 +03:00
mtdpart.c mtd: utilize `mtd_is_*()' functions 2011-09-21 09:19:06 +03:00
mtdsuper.c mtd: replace DEBUG() with pr_debug() 2011-09-11 15:02:16 +03:00
mtdswap.c mtd: utilize `mtd_is_*()' functions 2011-09-21 09:19:06 +03:00
nftlcore.c mtd: utilize `mtd_is_*()' functions 2011-09-21 09:19:06 +03:00
nftlmount.c mtd: spelling fixes 2011-09-11 15:02:16 +03:00
ofpart.c mtd: ofpart: add ofoldpart alias 2011-09-11 15:02:14 +03:00
redboot.c mtd: abstract last MTD partition parser argument 2011-09-11 15:02:10 +03:00
rfd_ftl.c mtd: Update copyright notices 2010-08-08 20:58:20 +01:00
sm_ftl.c mtd: utilize `mtd_is_*()' functions 2011-09-21 09:19:06 +03:00
sm_ftl.h mtd: sm_ftl: cosmetic, use bool when possible 2010-10-25 01:33:08 +01:00
ssfdc.c mtd: rename MTD_OOB_* to MTD_OPS_* 2011-09-11 15:28:59 +03:00