Patent ID: 8694855

Claim:
A system comprising: a data storage module including a storage block having a memory page; and a data storage controller coupled to the data storage module for reading data from and writing data to the data storage module, the data storage controller including: an error correction module for reading a data unit from the memory page and for generating a corrected data unit by using an error correction code for the data unit when a number of data bit errors in the data unit does not exceed an error correction capacity of the error correction code; a bit error indicator generator for generating, during an initial reading of the data unit and the error correction code of the data unit, a bit error indicator for the number of data bit errors detected in the initial reading of the data unit based on the error correction code for the data unit, the bit error indicator including a bit index for each of the data bit errors detected in the initial read of the data unit based on the error correction code for the data unit and including a correct bit value for each data bit error identified by the bit error indicator and storing the bit index and the correct bit value for each of the data bit errors detected during the initial read of the data unit into the data storage module; and a bit manipulation module operable, upon a subsequent reading of the data unit and the error correction code of the data unit from the memory page and when the number of data bit errors detected on the subsequent reading of the data unit exceeds the error correction capacity of the error correction code, to generate a modified data unit having a number of data bit errors within the error correction capacity of the error correction code, the modified data unit generated by using the bit index and the correct bit value of the bit error indicator generated during the initial read of the data unit and stored in the data storage module to correct the number of data bit errors in the data unit that exceeds the error correction capacity of the error correction code and the error correction module operable to use the error correction code of the data unit to correct the remaining errors in the data unit to generate a corrected data unit from the modified data unit.