Non-volatile memory program failure recovery via redundant arrays
First Claim
1. A method comprising:
- receiving, at a non-volatile memory controller, data to program N portions of a plurality of non-volatile memories, the data comprising particular data to program a particular one of the N portions;
storing the particular data in an allocated buffer associated with the non-volatile memory controller;
beginning programming the particular data to a particular one of the non-volatile memories;
updating redundancy information sufficient to recover from failures of M of the N portions of the plurality of non-volatile memories;
freeing the allocated buffer; and
continuing programming the particular data, the continuing programming the particular data comprises determining if there are any failures of the programming the particular data,wherein at least one of the storing the particular data, the beginning programming the particular data, the updating redundancy information, the freeing the allocated buffer, and the continuing programming the particular data, is in response to the receiving,wherein the freeing is prior to and independent of the particular non-volatile memory completing the programming, andwherein the continuing programming the particular data is independent of the freeing the allocated buffer.
5 Assignments
0 Petitions
Accused Products
Abstract
Non-volatile memory program failure recovery via redundant arrays enables higher programming bandwidth and/or reduced latency in some storage subsystem implementations, e.g. a solid-state disk. Data to program N portions of a plurality of non-volatile memories is received at a non-volatile memory controller. The data includes particular data to program a particular one of the N portions. The particular data is stored in an allocated buffer associated with the non-volatile memory controller. Programming the particular data to a particular one of the non-volatile memories is begun. Redundancy information sufficient to recover from failures of M of the N portions is updated. The allocated buffer is freed. At least one of the storing, the beginning programming, the updating, and the freeing is in response to the receiving of the particular data. The freeing is prior to the particular non-volatile memory completing the programming.
21 Citations
20 Claims
-
1. A method comprising:
-
receiving, at a non-volatile memory controller, data to program N portions of a plurality of non-volatile memories, the data comprising particular data to program a particular one of the N portions; storing the particular data in an allocated buffer associated with the non-volatile memory controller; beginning programming the particular data to a particular one of the non-volatile memories; updating redundancy information sufficient to recover from failures of M of the N portions of the plurality of non-volatile memories; freeing the allocated buffer; and continuing programming the particular data, the continuing programming the particular data comprises determining if there are any failures of the programming the particular data, wherein at least one of the storing the particular data, the beginning programming the particular data, the updating redundancy information, the freeing the allocated buffer, and the continuing programming the particular data, is in response to the receiving, wherein the freeing is prior to and independent of the particular non-volatile memory completing the programming, and wherein the continuing programming the particular data is independent of the freeing the allocated buffer. - View Dependent Claims (2, 3, 4, 5, 6, 7)
-
-
8. A non-transitory tangible computer readable medium having a set of instructions stored therein that when executed by a processing element cause the processing element to perform and/or control operations comprising:
-
receiving, at a non-volatile memory controller, data to program N portions of a plurality of non-volatile memories, the data comprising particular data to program a particular one of the N portions; storing the particular data in an allocated buffer associated with the non-volatile memory controller; beginning programming the particular data to a particular one of the non-volatile memories; updating redundancy information sufficient to recover from failures of M of the N portions of the plurality of non-volatile memories; freeing the allocated buffer; and continuing programming the particular data, the continuing programming the particular data comprises determining if there are any failures of the programming the particular data, wherein at least one of the storing the particular data, the beginning programming the particular data, the updating redundancy information, the freeing the allocated buffer, and the continuing programming the particular data, is in response to the receiving, wherein the freeing is prior to and independent of the particular non-volatile memory completing the programming, and wherein the continuing programming the particular data is independent of the freeing the allocated buffer. - View Dependent Claims (9, 10, 11, 12, 13, 14, 15)
-
-
16. A system comprising:
-
an allocated buffer; and a storage controller programmed for performing the steps comprising receiving data to program N portions of a plurality of non-volatile memories, the data comprising particular data to program a particular one of the N portions, storing the particular data in the allocated buffer associated with the storage controller, beginning programming the particular data to a particular one of the non-volatile memories, updating redundancy information sufficient to recover from failures of M of the N portions, freeing the allocated buffer, and continuing programming the particular data, the continuing programming the particular data comprises determining if there are any failures of the programming the particular data, wherein at least one of the storing the particular data, the beginning programming the particular data, the updating redundancy information, the freeing the allocated buffer, and the continuing programming the particular data, is in response to the receiving, wherein the freeing is prior to and independent of the particular non-volatile memory completing the programming, and wherein the continuing programming the particular data is independent of the freeing the allocated buffer. - View Dependent Claims (17, 18, 19, 20)
-
Specification