I need to modify YAFFS to trigger garbage collection on a block that has too many page reads between erases. This is due to the characterisation of the Micron NAND (MTMT29C4G48MAPLCJI6) I'm using where it can only have ~20K reads between erasures to maintain UBER below 10E-14. The NAND itself has an internal 4-bit ECC engine, but I can't extract any useful information from the ECC due to the lack of bit error counts (i.e. the chip can only tell me that a read required some level of correction but not the amount of correction, and worse the rate of corrections indicated by the chip is too high to employ effective strike counting). So I need to track the page reads in a block and if they reach a limit then cause the block to be garbage collected (i.e. copy out all the useful data and erase the block). I thought that just calling yaffs_handle_chunk_error() would suffice in this case (where the strike count limit that triggers block retirement is effectively disabled), but it apparently doesn't refresh the block. I know this because I've added low-level code in the MTD layer that tracks the page read counts between erasures on a per block bases, and when I continually read a file from YAFFS I see a block read counts increasing way past the 20K limit trigger w/o any intervening block erasure. How can I trigger garbage collection on a NAND read - I understand that the trigger needs to be selective/deferred to prevent recursion (i.e. don't want to deal with read count limits while garbage collecting a block that was triggered due to a read count limit). Any help is appreciated! -- Peter Barada peter.barada@logicpd.com