e.g. from a 10m file created with truncate on two Btrfs file systems
original holes format (default)
item 6 key (257 EXTENT_DATA 0) itemoff 15768 itemsize 53
generation 7412 type 1 (regular)
extent data disk byte 0 nr 0
extent data offset 0 nr 10485760 ram 10485760
extent compression 0 (none)
On a file system with no-holes feature set, this item simply doesn't
exist. I think basically it works by inference. Both kinds of files
have size in the INODE_ITEM, e.g.
item 4 key (257 INODE_ITEM 0) itemoff 32245 itemsize 160
generation 889509 transid 889509 size 10485760 nbytes 0
Sparse extents are explicitly stated in the original format with disk
byte 0 in an EXTENT_DATA item; whereas in the newer format, sparse
extents exist whenever EXTENT_DATA items don't completely describe the
file's size.
--
Chris Murphy