On Mon, Jun 22, 2009 at 02:28:25PM -0700, Jeremy Archer wrote:
>
> Also: what is BP_IS_HOLE? I see it has no birth_txg.
A "HOLE" BP is similar to a NULL pointer; it doesn't point to anything, and
is used to indicate there is no data underneath that block pointer. The
representation is all-zeros. Since any real block has to have a (non-zero)
birth txg, we only test birth_txg.
An example of the use of holes is in a file's data tree. A file which was
created like:
fd = open("foo", O_CREAT, 0777);
pwrite(fd, "foo", 3, 1024*1024);
close(fd);
will only have one block in it's data tree; the rest of the pointers will
be HOLEs.
When compression is turned on, any data block of all-zeros will be transformed
into a HOLE, instead of being written to disk.
The SEEK_HOLE and SEEK_DATA arguments to lseek(2) can be used to find the
actual data in a file.
Cheers,
- jonathan