[Yaffs-archive] yaffs: serious error in yaffs guts
Nick Bane
nick@cecomputing.co.uk
Thu, 27 Feb 2003 16:31:12 -0000
Charles
A couple of bugs. One serious, one minor.
in yaffs_ReadChunkFromNAND when dev->useNANDECC is true, it is assumed that
readChunkFromNAND fills in the two ecc result integers on the end of the oob
data.
These are then tested to see if there has been and ecc read fail/correction
by the mtd layer.
The problem with this is that readChunkFromNAND never actually passes the
ecc correction data back but leaves it in a local variable tmpSpare and only
copies YAFFS_BYTES_PER_SPARE from it.
The serious consequence of this is that all chunk reads are then flagged as
failures and their blocks are marked as needing retiring once the data is
erased so yaffs nand becomes effectively write-once. The really serious
consequence of this is that one cannot now distinguish between
yaffs_retired_blocks and nand_factory_bad_blocks so one has to speculatively
erase the entire device losing the factory erase data (which seems to be
zero on devices I have seen). Shouldn't we use a value other than 0 for
yaffs to mark the block as bad (with more than two zero bits) so they can be
distinguished?
The other bug is in testing the ecc correction results in
yaffs_ReadChunkFromNAND.
if(nspare.eccres2 || nspare.eccres2)
Clearly one of them should be eccres1
Nick
-------------------------------------------
Nick Bane
Cambridge, UK.
+44(0)1954 719270
---------------------------------------------------------------------------------------
This mailing list is hosted by Toby Churchill open software (www.toby-churchill.org).
If mailing list membership is no longer wanted you can remove yourself from the list by
sending an email to yaffs-request@toby-churchill.org with the text "unsubscribe"
(without the quotes) as the subject.