Patent ID: 7437528

Claim:
A method for allocating space on a disk comprising: receiving a first request to allocate space on the disk having a first size; allocating, in response to the first request, a first contiguous space having the first size and storing a first indirect block in the first contiguous space; storing a second indirect block comprising a first block pointer referencing the first indirect block, wherein the first block pointer comprises a first gang block header bit that is not set; receiving a second request to allocate space on the disk having a second size, wherein no contiguous space of the second size exists on the disk; allocating, in response to the second request, a gang block header, wherein the gang block header occupies a minimum allocateable portion on the disk; populating the gang block header; and responding to the second request to allocate space on the disk by storing a second block pointer in the second indirect block, wherein the second block pointer comprises a second gang block header bit that is set, wherein the second block pointer references the gang block header and comprises a disk virtual address (DVA), a birth, and a checksum field and wherein the DVA comprises the second gang block header bit and a size field, wherein populating the gang block header comprises: obtaining a second contiguous space on the disk having a third size, wherein the third size is less than the second size, storing a third pointer to the second contiguous space in the gang block header, obtaining a third contiguous space on the disk having a fourth size, wherein the fourth size is less than the second size, and storing a fourth pointer to the third contiguous space in the gang block header.