Each server may include a cache which is a volatile memory that is used as a read and write cache. For example, cache 210 is included in server 206 and cache 212 is included in server 208. Each server may also include a non-volatile storage (NVS) that is used to maintain and back up a second copy of the cache. For example, NVS 214 is included in server 206 and NVS 216 is included in server 208. If power is lost, batteries keep the storage controller 102 running until all data in NVS is written to internal storage of the storage controller 102. For processing host data, the storage controller 102 tries to maintain two copies of the data while the data moves through the storage controller 102. The cache and NVS of each server are used for holding host data.
When a write is sent to a storage volume and both the servers 206, 208 are operational, the write data is placed into the cache of the owning server for the write (e.g., server 206) and into the NVS of the other server (e.g., server 208). The NVS copy of the write data is accessed from the other server only if a write failure occurs and the cache of the owning server is empty or possibly invalid. Otherwise, the NVS copy of the write data in the other server is discarded after the destage from cache of the owning server to the storage devices 110,112 is complete. In certain embodiments, the cache 210 of server 206 is used for all logical volumes that are members of even logical subsystems (LSS), and the cache 212 of server 208 is used for all logical volumes that are members of odd logical subsystems, where the logical subsystems are numbered consecutively.