UBIFS partition on NOR flash not mountable after power cut test

Anatolij Gustschin agust at denx.de
Thu Dec 2 08:23:51 EST 2010


On Thu, 02 Dec 2010 14:18:45 +0200
Artem Bityutskiy <dedekind1 at gmail.com> wrote:

> On Thu, 2010-12-02 at 10:57 +0100, Anatolij Gustschin wrote:
> > UBIFS DBG (pid 1290): no_more_nodes: unexpected bad common header at 37:157472
> > UBIFS error (pid 1290): ubifs_recover_leb: bad node
> > UBIFS error (pid 1290): ubifs_scanned_corruption: corruption at LEB 37:157472
> > UBIFS error (pid 1290): ubifs_scanned_corruption: first 8192 bytes from LEB 37:157472
> > 00000000: 31181006 270758c8 0c331500 00000000 ffffffff ffffffff ff4fffff f3428020  1...'.X..3...............O...B. 
> 
> But this looks exactly like you have 64-bit write-buffer, but UBIFS
> c->min_io_unit is not 64, but it should be 64. Or you need a NOR hack to
> force 8-bytes write-buffer.

This looks exactly like I have a 16 byte write buffer. The first
16 bytes of the common header node have been written correctly but
the remaining 8 bytes of the common header and then the 8 bytes of
the data are corrupt.
> 
> Are you sure you did not miss your NOR write-buffer hacks?

I'm sure that the kernel running this test uses the modification in
the CFI code as follows:
diff --git a/drivers/mtd/chips/cfi_probe.c b/drivers/mtd/chips/cfi_probe.c
index e63e674..9eb47b8 100644
--- a/drivers/mtd/chips/cfi_probe.c
+++ b/drivers/mtd/chips/cfi_probe.c
@@ -213,6 +213,12 @@ static int __xipram cfi_chip_setup(struct map_info *map,
        cfi->cfiq->InterfaceDesc = le16_to_cpu(cfi->cfiq->InterfaceDesc);
        cfi->cfiq->MaxBufWriteSize = le16_to_cpu(cfi->cfiq->MaxBufWriteSize);
 
+       /*printk("NOTE: change CFI MaxBufWriteSize from 2^%d to 2^%d\n",*/
+       /*cfi->cfiq->MaxBufWriteSize, 3);*/
+       if (cfi->cfiq->MaxBufWriteSize) {
+               cfi->cfiq->MaxBufWriteSize = 3;
+       }
+

But I'm not sure whether the CFI driver is really using 8 byte
write buffer since the error pattern indicates the usage of a
bigger buffer. I'll check the actual size used in the CFI driver
at runtime.

Thanks,
Anatolij



More information about the linux-mtd mailing list