Method and system for pruned resilvering using a dirty time log
First Claim
Patent Images
1. A computer readable medium comprising executable instructions for resilvering a hierarchical block tree in a storage pool by:
- selectively traversing a branch of the hierarchical block tree when a birth time of a parent block of the branch is greater than or equal to a lowest birth time on a dirty time log (DTL), wherein the DTL is configured to;
track when one or more I/O requests are not successfully completed, andstore birth times for the one or more I/O requests that are not successfully completed, wherein the stored birth times are equivalent to birth times that would have been associated with a successful write to disk; and
resilvering a child block of a plurality of child blocks in the branch when the DTL comprises a birth time of the child block, wherein a birth time of each child block of the plurality of child blocks is less than or equal to the birth time of the parent block,wherein the parent block comprises the birth time of the child block, andwherein the DTL is updated only once when more than one I/O request for the child block and the parent block fail at a same birth time.
2 Assignments
0 Petitions
Accused Products
Abstract
A computer readable medium includes executable instructions for resilvering a hierarchical block tree in a storage pool. Resilvering the hierarchical block tree involves traversing a branch of the hierarchical block tree only if a birth time of a parent block of the branch is greater than or equal to a lowest birth time on a dirty time log (DTL). Resilvering the hierarchical block tree further involves resilvering a child block in the branch only if the DTL comprises a birth time of the child block.
-
Citations
17 Claims
-
1. A computer readable medium comprising executable instructions for resilvering a hierarchical block tree in a storage pool by:
-
selectively traversing a branch of the hierarchical block tree when a birth time of a parent block of the branch is greater than or equal to a lowest birth time on a dirty time log (DTL), wherein the DTL is configured to; track when one or more I/O requests are not successfully completed, and store birth times for the one or more I/O requests that are not successfully completed, wherein the stored birth times are equivalent to birth times that would have been associated with a successful write to disk; and resilvering a child block of a plurality of child blocks in the branch when the DTL comprises a birth time of the child block, wherein a birth time of each child block of the plurality of child blocks is less than or equal to the birth time of the parent block, wherein the parent block comprises the birth time of the child block, and wherein the DTL is updated only once when more than one I/O request for the child block and the parent block fail at a same birth time. - View Dependent Claims (2, 3, 4, 5, 6)
-
-
7. A method for resilvering a hierarchical block tree in a storage pool, the method comprising:
-
obtaining, using a processor, a birth time of each child block of a plurality of child blocks referenced by a parent block in the hierarchical block tree, wherein the birth time of each child block of the plurality of child blocks is less than or equal to a birth time of the parent block; and for each child block; a) resilvering, using the processor, the child block when a dirty time log (DTL) comprises the birth time of the child block, wherein the DTL is configured to; track when one or more I/O requests are not successfully completed, and store birth times for the one or more I/O requests that are not successfully completed, wherein the birth times are equivalent to birth times that would have been associated with a successful write to disk; and b) when the birth time of the child block is greater than or equal to a lowest birth time on the DTL; selectively traversing, using the processor, the hierarchical block tree to obtain a birth time of each grandchild block referenced by the child block, when the child block is an indirect block; and repeating a) and b) for each grandchild block, if the child block is an indirect block, wherein the parent block comprises the birth time of the child block, and wherein the DTL is updated only once when more than one I/O request for the child block and the parent block fail at a same birth time. - View Dependent Claims (8, 9, 10, 11, 12)
-
-
13. A computer system comprising:
-
a processor; a memory; a hierarchical block tree in a storage pool, comprising; a parent block of a branch of the hierarchical block tree; and a child block of a plurality of child blocks in the branch, wherein a birth time of each child block of the plurality of child blocks is less than or equal to a birth time of the parent block; a dirty time log (DTL) configured to; track when one or more I/O requests are not successfully completed, and store birth times for the one or more I/O requests that are not successfully completed, wherein the stored birth times are equivalent to birth times that would have been associated with a successful write to disk; and a file system, wherein at least a portion of the file system is resident in the memory and operating under control of the processor, configured to; selectively traverse the branch when the birth time of the parent block is greater than or equal to a lowest birth time on the DTL; and resilver the child block when the DTL comprises a birth time of the child block, wherein the parent block comprises the birth time of the child block, and wherein the DTL is updated only once when more than one I/O request for the child block and the parent block fail at a same birth time. - View Dependent Claims (14, 15, 16, 17)
-
Specification