A method of processing a request by a host to access data stored in a memory device , the method comprising: reading data from the memory device in response to the request; applying an iterative decoder to the read data; upon determining that the iterative decoder is oscillating , determining a total number of rows in first data (J 1 ) the decoder attempted to correct; estimating first visible error rows among the total number that continue to have an error after the attempt; estimating residual error rows among the total number that no longer have an error after the attempt; determining second visible error rows in second data (J 2 ), which corresponds to permutated first data (J 1 ), of the decoder that continue to have an error by permuting indices of the residual error rows according to the permutation; determining whether zero or more first hidden error rows are present in the first data (J 1 ) using the second visible error rows, where each hidden error row corresponds to a valid Hamming codeword with an error which the decoder is not able to detect; correcting the first data (J 1 ) using the first visible error rows and the determined number of first hidden error rows; and outputting the corrected data to the host, wherein the iterative decoder is configured to decode a generalized low-density parity-check (GLDPC) code based on a Hamming code. reading data from the memory device in response to the request; applying an iterative decoder to the read data; upon determining that the iterative decoder is oscillating , determining a total number of rows in first data (J 1 ) the decoder attempted to correct; estimating first visible error rows among the total number that continue to have an error after the attempt; estimating residual error rows among the total number that no longer have an error after the attempt; determining second visible error rows in second data (J 2 ), which corresponds to permutated first data (J 1 ), of the decoder that continue to have an error by permuting indices of the residual error rows according to the permutation; determining whether zero or more first hidden error rows are present in the first data (J 1 ) using the second visible error rows, where each hidden error row corresponds to a valid Hamming codeword with an error which the decoder is not able to detect; correcting the first data (J 1 ) using the first visible error rows and the determined number of first hidden error rows; and outputting the corrected data to the host, wherein the iterative decoder is configured to decode a generalized low-density parity-check (GLDPC) code based on a Hamming code. determining a total number of rows in first data (J 1 ) the decoder attempted to correct; estimating first visible error rows among the total number that continue to have an error after the attempt; estimating residual error rows among the total number that no longer have an error after the attempt; determining second visible error rows in second data (J 2 ), which corresponds to permutated first data (J 1 ), of the decoder that continue to have an error by permuting indices of the residual error rows according to the permutation; determining whether zero or more first hidden error rows are present in the first data (J 1 ) using the second visible error rows, where each hidden error row corresponds to a valid Hamming codeword with an error which the decoder is not able to detect; correcting the first data (J 1 ) using the first visible error rows and the determined number of first hidden error rows; and outputting the corrected data to the host, wherein the iterative decoder is configured to decode a generalized low-density parity-check (GLDPC) code based on a Hamming code. <EOS>