linux/drivers/mtd
Sebastian Andrzej Siewior 6afaf8a484 UBI: flush wl before clearing update marker
ubiupdatevol -t does the following:
- ubi_start_update()
  - set_update_marker()
  - for all LEBs ubi_eba_unmap_leb()
  - clear_update_marker()
  - ubi_wl_flush()

ubi_wl_flush() physically erases all PEB, once it returns all PEBs are
empty. clear_update_marker() has the update marker written after return.
If there is a power cut between the last two functions then the UBI
volume has no longer the "update" marker set and may have some valid
LEBs while some of them may be gone.
If that volume in question happens to be a UBIFS volume, then mount
will fail with

|UBIFS error (pid 1361): ubifs_read_node: bad node type (255 but expected 6)
|UBIFS error (pid 1361): ubifs_read_node: bad node at LEB 0:0
|Not a node, first 24 bytes:
|00000000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

if there is at least one valid LEB and the wear-leveling worker managed
to clear LEB 0.

The patch waits for the wl worker to finish prior clearing the "update"
marker on flash. The two new LEB which are scheduled for erasing after
clear_update_marker() should not matter because they are only visible to
UBI.

Signed-off-by: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Cc: stable@kernel.org
2009-12-04 07:47:11 +02:00
..
chips mtd: jedec_probe: add PSD4256G6V id 2009-09-23 00:07:00 -07:00
devices headers: remove sched.h from interrupt.h 2009-10-11 11:20:58 -07:00
lpddr
maps ARM: Fix warning in sa1100-flash.c 2009-11-16 16:13:35 +00:00
nand mtd: nand: fix htmldocs warnings 2009-09-24 07:46:25 -07:00
onenand mtd: onenand: make onenand/generic.c more generic 2009-09-19 11:07:50 -07:00
tests mtd: tests: fix read buffer overflows 2009-09-04 09:40:17 +01:00
ubi UBI: flush wl before clearing update marker 2009-12-04 07:47:11 +02:00
afs.c mtd: afs: fix build warning 2009-09-04 09:38:14 +01:00
ar7part.c
cmdlinepart.c mtd: cmdlineparts: Use 64-bit format when printing a debug message. 2009-06-25 08:18:12 +01:00
ftl.c trivial: mtd: add __init/__exit macros to init/exitfunctions 2009-09-21 15:14:53 +02:00
inftlcore.c mtd: inftl: fix fold chain block number 2009-09-19 14:17:35 -07:00
inftlmount.c
internal.h
Kconfig Merge branch 'for-linus' of git://git.monstr.eu/linux-2.6-microblaze 2009-09-24 09:01:44 -07:00
Makefile
mtd_blkdevs.c block: use normal I/O path for discard requests 2009-10-01 21:19:30 +02:00
mtdbdi.c
mtdblock_ro.c
mtdblock.c Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 2009-09-20 05:55:36 -07:00
mtdchar.c
mtdconcat.c mtd: mtdconcat: prevent a read from eraseregions[-1] 2009-09-19 11:18:46 -07:00
mtdcore.c Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 2009-09-20 05:55:36 -07:00
mtdcore.h
mtdoops.c
mtdpart.c Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 2009-09-20 05:55:36 -07:00
mtdsuper.c
nftlcore.c mtd: nftl: fix offset alignments 2009-09-03 14:59:16 +01:00
nftlmount.c
ofpart.c mtd: ofpart: Check availability of reg property instead of name property 2009-09-19 14:14:48 -07:00
redboot.c
rfd_ftl.c
ssfdc.c