HAMMER 32/many: Record holes, initial undo API, initial reblocking code
* Add code to record recent 'holes' created by the blockmap allocator
due to the requirement that data blocks not cross a 16K hammer buffer
boundary, in order to try to fill in the gaps with smaller chunks of data
when possible.
Currently a hole is not added for blockmap frees. It is questionable
whether it is a good idea to do it for frees or not, because it can
interfere with the reblock code's attempt to completely free a big block.
* Add a reblocking ioctl which scans the B-Tree and reblocks leaf nodes,
records, and data in partially empty big blocks to try to free up
the entire big block. Incomplete (needs to reblock internal B-Tree nodes
and doesn't yet, needs a low-free-space mode which focuses on freeing
a single large block).
* Add the API infrastructure required to implement the undo records,
and implement the initial undo code (sans ordering requirements for
writes). Incomplete.
15 files changed: