Efficient retry mechanism for solid-state memory failures
AssigneeWestern Digital Technologies, Inc.
InventorsAsif F. Gosla, Chiranjeb Mondal
Life of this patent
Estimating the term…
Abstract
A data storage subsystem is disclosed that implements a solid-state data buffering scheme. Prior to completion of programming in solid-state storage media, data that is formatted for storage in solid-state media is maintained in one or more buffers. The system is able to retry failed programming operations directly from the buffers, rather than reprocessing the data. The relevant programming pipeline may therefore be preserved by skipping over a failed write operation and reprocessing the data at the end of the current pipeline processing cycle.
Claims15
A data storage system comprising:
- a first volatile memory;
- a second volatile memory;
- a first non-volatile memory;
- and
- a controller configured to:
- upon detection of a power failure, preserve data in the first volatile memory by:
- dividing one or more logical units of data in the first volatile memory into a plurality of data blocks in accordance with a storage format of the first non-volatile memory;
- encoding the plurality of data blocks in accordance with the format;
- storing the encoded data blocks in the second volatile memory;
- submitting the encoded data blocks for storage in the first non-volatile memory;
- and
- when an encoded data block encounters a storage failure in the first non-volatile memory, marking the failed data block in the second volatile memory for re-submission to the first non-volatile memory after completion of a current programming pipeline;
- wherein the re-submission is performed without encoding another data block that corresponds to a common logical unit of data as the encoded data block that encountered the storage failure.
A method of reprogramming failed data writes to non-volatile memory, the method comprising:
- detecting a power failure in a data storage system;
- and
- in response to detecting the power failure:
- dividing one or more logical units of data in a first volatile memory into a plurality of data blocks in accordance with a storage format of a first non-volatile memory;
- encoding the plurality of data blocks in accordance with the format;
- storing the encoded data blocks in a second volatile memory;
- submitting the encoded data blocks for storage in the first non-volatile memory;
- and
- in response to an encoded data block encountering a storage failure in the first non-volatile memory, marking the failed data block in the second volatile memory for re-submission to the first non-volatile memory after completion of a current programming pipeline;
- wherein the re-submission is performed without encoding another data block that corresponds to a common logical unit of data as the encoded data block that encountered the storage failure.
Dependencies are inferred from the claim text.