Patent ID: 7693880

Claim:
A system comprising: one or more processors; a storage medium that stores program instructions executable by the one or more processors to implement a file system including a first file and a first inode for the first file, wherein the file system is configured to: store in the first inode a starting address for a first set of data blocks of the first file; store in the first inode starting addresses for two or more sets of mirror data blocks, wherein each set of mirror data blocks mirrors the first set of data blocks of the first file; store in the first inode a respective dirty indicator corresponding to each set of the two or more sets of mirror data blocks; and perform a write operation to write particular data to the first file, wherein performing the write operation includes performing the following for each respective set of mirror data blocks: initiating writing of the particular data to the respective set of mirror data blocks; setting the respective dirty indicator corresponding to the respective set of mirror data blocks in response to initiating the write operation, wherein setting the respective dirty indicator indicates that the particular data has not yet been successfully written to the respective set of mirror data blocks; clearing the respective dirty indicator corresponding to the respective set of mirror data blocks in response to determining that the particular data was successfully written to the respective set of mirror data blocks, or otherwise leaving the respective dirty indicator set if the particular data cannot be successfully written to the respective set of mirror data blocks; wherein the file system is further configured to: subsequently to performing the write operation, determine that a particular dirty indicator corresponding to a particular set of the two or more sets of mirror data blocks is set; resynchronize the particular set of mirror data blocks with one or more other sets of mirror data blocks in response to determining that the particular dirty indicator is set; and clear the particular dirty indicator after resynchronizing the particular set of mirror data blocks with the one or more other sets of mirror data blocks.