1. A storage subsystem, comprising: non-volatile storage; a controller connected to the non-volatile storage and configured to write data to and read data from the non-volatile storage in response to instructions and data received from a host system; and an error correction module configured to generate error correction code (ECC) data based on an ECC setting when the controller writes data to the non-volatile storage, the ECC setting corresponding to one of a plurality of levels of protection; wherein the controller is capable of selecting said ECC setting based at least in part on one or more monitored operating conditions of the storage subsystem, wherein the ECC setting corresponds to one of a plurality of possible risk levels, and wherein the quantity of ECC data generated by the error correction module when data is written to the non-volatile storage is based at least in part on a current one of the plurality of risk levels.