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.