主权项 |
1. A method for implementing a file system, the method comprising:
within the file system, maintaining a plurality of snapshots of data stored in one or more extents of consecutive blocks allocated in a storage, and maintaining a birth time that is updated according to a creation of each snapshot of the plurality of snapshots, wherein each snapshot references one or more tree nodes, and each of the one or more tree nodes references at least one or a portion of the one or more extents of consecutive blocks, and is associated with:
a time stamp indicating a time at which the tree node was created, anda reference count indicating a number of snapshots that reference the tree node; in response to receiving a request to update data represented by a particular one of the plurality of snapshots, identifying, within the one or more tree nodes referenced by the particular one of the plurality of snapshots, a particular tree node that references the data specified in the request; determining whether the particular tree node is a leaf node, wherein the leaf node represents a node without child nodes; in response to a determination that the particular tree node is a leaf node:
determining, by comparing a current birth time to the time stamp of the particular tree node, whether the particular tree node is referenced by more than one of the plurality of snapshots; in response to a determination that the particular tree node is not referenced by more than one of the plurality of snapshots, updating the data associated with the particular tree node in-place without first needing to access a data structure to retrieve the reference count associated with the particular tree node, wherein the data structure stores reference counts for each of the one or more tree nodes; and in response to a determination that the particular tree node is not a leaf node or that the particular tree node is referenced by more than one of the plurality of snapshots, accessing the data structure to retrieve the reference count associated with the particular tree node, and performing copy-on-write operations to update the data associated with the particular tree node based on the retrieved reference count. |