I have a statement that uses "at once". It is supposed to mean "in one sweep" but the longer I look at it, the more it sounds to me like "immediately". What would you suggest? Keep it or change it?
Consider a range of possibilities, where all metadata blocks are either allocated in one continuous range (called an extent), are divided into subsets, or are divided into individual blocks. First approach we shall call the extent approach and it requires that all blocks are read from a continuous area on disk at once and after changes are made all blocks are stored to another continuous area at once. Last approach we shall call block approach. It is prevalent in modern filesystems. Space is allocated eagerly and non-preemptively, one block at a time eventually leading to fragmentation of metadata.
For comparison, here is a different fragment from same document:
Consider a hybrid or rather a transitional approach. Initially all entries are loaded from one extent, kept in memory in entirety and the whole time, and occasionally stored to disk as one extent. If at some point amount of entries grows over a certain threshold, a transition to a B-tree representation is commenced, all entries (already in memory) are relocated into tree nodes and stored to disk in one sweep. The threshold can be chosen low enough so storing entire dictionary in one sweep is faster than analogous B-tree operation (few disk seeks). After transition, operations are carried out on the B-tree representation. If changes are being accumulated over some period of time then comparison is even more favorable. Intents (patches) can be stored to disk to persist individual operations instead of storing the entire dictionary every time. Intents are described in a later chapter on fsync.