A solid-state storage system, comprising: a non-volatile solid-state memory array configured to store a plurality of data units; and a controller configured to: perform a decoding algorithm to iteratively decode a data unit using a quasi-cyclic low-density parity-check decoding matrix comprising a plurality of horizontal layers including a first horizontal layer and a second horizontal layer, wherein the total number of horizontal layers within the decoding matrix is x, an iteration of the decoding algorithm consists of x horizontal layer decoding operations, and the data unit is read from the memory array; wherein performing the decoding algorithm comprises the steps of (a) performing a current layer decoding operation corresponding to a first horizontal layer of the decoding matrix to obtain a decoded data unit; (b) performing a parity check including a matrix multiplication of the decoded data unit with the transpose of the first horizontal layer of the decoding matrix and determining whether said parity check is satisfied; (c) performing, substantially in parallel to step (b), a parity check including a matrix multiplication of the decoded data unit with the transpose of a second horizontal layer of the decoding matrix, wherein the second horizontal layer is the horizontal layer corresponding to the next consecutive layer decoding operation and determining whether said parity check is satisfied; (d) continuing with the iterative decoding of the data unit with the next consecutive horizontal layer decoding operation until a maximum number of iterations are reached or both of the following early termination detection conditions are determined: the parity checks are satisfied for x number of consecutive horizontal layers; and the decoded data unit remains unchanged for x-2 consecutive layer decoding operations. a non-volatile solid-state memory array configured to store a plurality of data units; and a controller configured to: perform a decoding algorithm to iteratively decode a data unit using a quasi-cyclic low-density parity-check decoding matrix comprising a plurality of horizontal layers including a first horizontal layer and a second horizontal layer, wherein the total number of horizontal layers within the decoding matrix is x, an iteration of the decoding algorithm consists of x horizontal layer decoding operations, and the data unit is read from the memory array; wherein performing the decoding algorithm comprises the steps of (a) performing a current layer decoding operation corresponding to a first horizontal layer of the decoding matrix to obtain a decoded data unit; (b) performing a parity check including a matrix multiplication of the decoded data unit with the transpose of the first horizontal layer of the decoding matrix and determining whether said parity check is satisfied; (c) performing, substantially in parallel to step (b), a parity check including a matrix multiplication of the decoded data unit with the transpose of a second horizontal layer of the decoding matrix, wherein the second horizontal layer is the horizontal layer corresponding to the next consecutive layer decoding operation and determining whether said parity check is satisfied; (d) continuing with the iterative decoding of the data unit with the next consecutive horizontal layer decoding operation until a maximum number of iterations are reached or both of the following early termination detection conditions are determined: the parity checks are satisfied for x number of consecutive horizontal layers; and the decoded data unit remains unchanged for x-2 consecutive layer decoding operations. (a) performing a current layer decoding operation corresponding to a first horizontal layer of the decoding matrix to obtain a decoded data unit; (b) performing a parity check including a matrix multiplication of the decoded data unit with the transpose of the first horizontal layer of the decoding matrix and determining whether said parity check is satisfied; (c) performing, substantially in parallel to step (b), a parity check including a matrix multiplication of the decoded data unit with the transpose of a second horizontal layer of the decoding matrix, wherein the second horizontal layer is the horizontal layer corresponding to the next consecutive layer decoding operation and determining whether said parity check is satisfied; (d) continuing with the iterative decoding of the data unit with the next consecutive horizontal layer decoding operation until a maximum number of iterations are reached or both of the following early termination detection conditions are determined: the parity checks are satisfied for x number of consecutive horizontal layers; and the decoded data unit remains unchanged for x-2 consecutive layer decoding operations. the parity checks are satisfied for x number of consecutive horizontal layers; and the decoded data unit remains unchanged for x-2 consecutive layer decoding operations.