Patent ID: 7558906

Claim:
A method of operating a non-volatile memory system having memory cells grouped into blocks of memory cells that are erased together prior to reprogramming data into pages of the blocks, the blocks being identified by physical block addresses, comprising: storing data received by the memory system in a plurality of the blocks, maintaining a plurality of records for corresponding ones of the plurality of blocks, the records individually including values of a at least first, second and third descriptors of different aspects of the data stored in one of the plurality of blocks to which the record pertains as identified by the address of the block, the first descriptor being an amount of valid data in the corresponding block, the second descriptor being an amount of erased capacity of the corresponding block and the third descriptor being an amount of obsolete data in the corresponding block, maintaining a first list that includes pointers by the addresses of the plurality of blocks, the pointers individually pointing to the location within the memory system of one of the records for one of the blocks in response to receiving the address of said one block, and further wherein the pointers are placed in the list of pointers in order of the addresses of their respective plurality of blocks, maintaining a second list that includes addresses of the plurality of blocks whose corresponding records contain values of at least the first and second descriptors, wherein the addresses of the plurality of blocks in the second list are placed in an order of values of the first descriptor in their corresponding records, maintaining a third list that includes addresses of the plurality of blocks whose corresponding records contain values of at least the first and third descriptors, wherein the addresses of the plurality of blocks in the third list are placed in an order of values of the first descriptor in their corresponding records, and performing an operation of the memory system on data stored in individual ones of the plurality of blocks in the second list in the order in which they appear in the second list.