Patent ID: 8862816

Claim:
A system for mirroring dual writeable storage arrays, comprising: a first host computing device; a second host computing device coupled to the first host computing device, the first host computing device and the second host computing device arranged in a clustered file system configuration; a first storage array coupled to the first host computing device; a second storage array coupled to the first storage array and the second host computing device; a first cache in communication with the first host computing device; and a second cache in communication with the second host computing device and the first cache, wherein: the first storage array and the second storage array include corresponding blocks for storing data and mirroring the data in the other respective corresponding block, the first storage array and the second storage array are configured to be written to by the first host computing device and the second host computing device, respectively, the first cache is configured to receive commands from the first host computing device to write first data to the first storage array and to instruct the second cache to write the first data to corresponding portions of the second storage array, substantially simultaneously with the first cache receiving commands from the first host computing device to write the first data to the first storage array, the second cache is configured to receive commands from the second host computing device to write second data to the second storage array while the first data is being written to the first storage array and to instruct the first cache to write the second data to corresponding portions of the first storage array, in response to substantially simultaneously receiving commands from the first host computing device to write the first data to the first storage array and receiving commands from the second host computing device to write second data to the second storage array, the first cache and the second cache are configured to give priority to one of the first storage array or the second storage array based on a predetermined criterion where priority is given to the storage array including a flag identifying the corresponding storage array as being the storage array that was last written to, as the first data is being written to a particular block in the first storage array by a corresponding host, the first data is also being substantially simultaneously mirrored from the first storage array to the second storage array, and as the second data is being written to a particular block in the second storage array by a corresponding host, the second data is also being substantially simultaneously mirrored from the second storage array to the first storage array.