From patchwork Thu Jun 21 21:49:54 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [01/15] UBI: Fastmap: Relax EBA selfcheck Date: Thu, 21 Jun 2012 11:49:54 -0000 From: Richard Weinberger X-Patchwork-Id: 166402 Message-Id: <1340315408-27375-2-git-send-email-richard@nod.at> To: linux-mtd@lists.infradead.org Cc: artem.bityutskiy@linux.intel.com, linux-kernel@vger.kernel.org, adrian.hunter@intel.com, Heinz.Egger@linutronix.de, thomas.wucher@linutronix.de, shmulik.ladkani@gmail.com, Richard Weinberger , tglx@linutronix.de, Marius.Mazarel@ugal.ro, tim.bird@am.sony.com It is allowed that fastmap knows an EBA table entry as unmapped while scanning would know this entry as mapped. Fastmap knows the current EBA table and scannning reconstructs it. This case can happen if the fastmap gets written while the entry is alredy unmapped but the PEB has not been erased. If the UBI device gets detached at this moment, scanning may detect this EBA entry as mapped. (Of course the upper layer, UBIFS, knows this LEB is no longer used) Signed-off-by: Richard Weinberger --- drivers/mtd/ubi/eba.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/drivers/mtd/ubi/eba.c b/drivers/mtd/ubi/eba.c index 2bee8be..6698d5e 100644 --- a/drivers/mtd/ubi/eba.c +++ b/drivers/mtd/ubi/eba.c @@ -1276,7 +1276,8 @@ int self_check_eba(struct ubi_device *ubi, struct ubi_attach_info *ai_fastmap, for (j = 0; j < vol->reserved_pebs; j++) { if (scan_eba[i][j] != fm_eba[i][j]) { - if (scan_eba[i][j] == UBI_LEB_UNMAPPED) + if (scan_eba[i][j] == UBI_LEB_UNMAPPED || + fm_eba[i][j] == UBI_LEB_UNMAPPED) continue; ubi_err("LEB:%i is mapped to PEB:%i instead of PEB:%i!", i, fm_eba[i][j], scan_eba[i][j]);