UBI: do not switch to R/O mode on read errors
authorArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Sun, 24 May 2009 11:13:34 +0000 (14:13 +0300)
committerArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Tue, 2 Jun 2009 10:53:35 +0000 (13:53 +0300)
commitb86a2c56e512f46d140a4bcb4e35e8a7d4a99a4b
tree59c3e036dfd767b73e700bd7fd8cb4bee15c4f58
parent87960c0b12d0c5a0b37e0c79aef77aa1a0b10d44
UBI: do not switch to R/O mode on read errors

This patch improves UBI errors handling. ATM UBI switches to
R/O mode when the WL worker fails to read the source PEB.
This means that the upper layers (e.g., UBIFS) has no
chances to unmap the erroneous PEB and fix the error.
This patch changes this behaviour and makes UBI put PEBs
like this into a separate RB-tree, thus preventing the
WL worker from hitting the same read errors again and
again.

But there is a 10% limit on a maximum amount of PEBs like this.
If there are too much of them, UBI switches to R/O mode.

Additionally, this patch teaches UBI not to panic and
switch to R/O mode if after a PEB has been copied, the
target LEB cannot be read back. Instead, now UBI cancels
the operation and schedules the target PEB for torturing.

The error paths has been tested by ingecting errors
into 'ubi_eba_copy_leb()'.

Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
drivers/mtd/ubi/build.c
drivers/mtd/ubi/eba.c
drivers/mtd/ubi/ubi.h
drivers/mtd/ubi/wl.c