
On Mon, 2013-08-19 at 10:55 +0200, Stefan Roese wrote:
On 06.08.2013 12:13, Paul Burton wrote:
Linux modified the MTD driver interface in commit edbc4540 (with the same name as this commit). The effect is that calls to mtd_read will not return -EUCLEAN if the number of ECC-corrected bit errors is below a certain threshold, which defaults to the strength of the ECC. This allows -EUCLEAN to stop indicating "some bits were corrected" and begin indicating "a large number of bits were corrected, the data held in this region of flash may be lost soon". UBI makes use of this and when -EUCLEAN is returned from mtd_read it will move data to another block of flash. Without adopting this interface change UBI on U-boot attempts to move data between blocks every time a single bit is corrected using the ECC, which is a very common occurance on some devices. For some devices it can be so common that UBI gets stuck constantly moving data around because each block it attempts to use has a single bit error. This patch adopts the interface change as in Linux commit edbc4540 in order to avoid such situations.
Given that none of the drivers under drivers/mtd return -EUCLEAN, this should only affect those using software ECC. I have tested that it works on a board which is currently out of tree, but which I hope to be able to begin upstreaming soon.
Paul, a quick question to clarify this. This patch fixes a regression in the current mtd->_read implementation (used by UBI) that was introduced by the MTD sync to v3.7.1? Is this correct?
And what error exactly did occur on your system?
From the description it sounds like it's not a regression but rather an
improvement that wasn't possible before the sync.
-Scott