1. A storage subsystem, comprising: a non-volatile solid-state memory array; and a controller comprising a garbage collection module and configured to receive and execute memory commands from a host system and the garbage collection module, the controller further configured to: maintain, for a first memory block in the memory array, an invalid page counter for storing data related to a number of invalid pages within the first memory block, the first memory block assigned by the number of invalid pages into a first pool, wherein the garbage collection module is configured to select memory blocks from a plurality of pools based on the number of invalid pages, wherein the first memory block is associated with a first group of memory blocks, the first group of memory blocks including a plurality of checking bits, each checking bit from the plurality of checking bits corresponding to a different pool from the plurality of pools, the checking bits configured to indicate whether at least one memory block of the first group of memory blocks is assigned to the corresponding pool; upon executing a memory command from the host system that causes a change in a validity of a page within the first memory block, update an invalid page counter associated with the first memory block; and reassign the first memory block to a second pool when the updated invalid page counter exceeds a threshold and set a checking bit corresponding to the second pool to indicate that at least one memory block of the first group of memory blocks is assigned to the second pool.