UBI Static Volume CRC Corruption

Kyle Abramowitz abramowitzk at gmail.com
Mon Aug 10 14:09:00 PDT 2026


Hello,

I am working on a NAND driver for an MT7620A and a Winbond W29N01HV

Something unusual came up in testing. An erase block that is bad, but not
yet marked bad is causing `ubiupdatevol` to report CRC corruption on its
validation pass for static volumes. The write and erase functions do not return
any errors as they do not do any sort of readback validation. This
seems consistent
with other drivers I see in the tree (Kernel 6.12).

The issue we are running into is that we expected UBI to torture this block once
it was discovered to have unrecoverable ECC errors. But after tracing
through the
code, we found that the scrubbing step is skipped in this case and no
torture happens
so this block never gets marked as bad.

My questions are: what is the proper way to handle this? What should
happen on a freshly
discovered bad block that has not been marked yet? Is it intended that
scrubbing and torturing
is skipped on crc failures in `ubi_eba_read_leb()`?

My hope was that it would get marked bad eventually and remapped to a
new PEB so a future
write would succeed.

Thank you!

Kyle



More information about the linux-mtd mailing list