A method implemented at least in part by a computer, the method comprising: indicating that a first set of updates of file system objects (319, 320, 321) in a storage of a file system are to be associated with a first checkpoint of the file system, the first checkpoint indicating a consistent state of the file system; determining to write checkpoint data of the first checkpoint to the storage of the file system that uses copy on write to update data of the file system; indicating that any updates of file system objects that occur subsequent to the first set of updates are to be associated with a subsequent checkpoint; generating write plans for the first set of updates, each write plan indicating at least a planned location on the storage for data representing at least one of the first set of updates; updating a global table (310; 405) indicating allocation data of the file system as well as storage locations for file system objects (322, 323) modified by the write plans; obtaining a lock on the global table and creating a logical copy of the updated global table in a main memory, the lock preventing updating the global table while write plans for the other updates are allowed to be generated; releasing the lock and indicating that the subsequent checkpoint has been enabled and that subsequent updates are allowed to update the global table; creating a write plan to write the checkpoint data of the first checkpoint to the storage while allowing write plans to be generated for the subsequent updates in parallel with creating the write plan, the checkpoint data of the first checkpoint including the logical copy; after all updates of the first set of updates are successfully written to the storage, writing the checkpoint data to the storage, waiting for an acknowledgment that a flush has successfully completed, the flush writing all data, that has not already been written from a volatile memory to a non-volatile memory of the storage, to the non-volatile memory of the storage, writing a checkpoint record that includes a validation code, the validation code being for determining whether the first set of updates was correctly written to storage. indicating that a first set of updates of file system objects (319, 320, 321) in a storage of a file system are to be associated with a first checkpoint of the file system, the first checkpoint indicating a consistent state of the file system; determining to write checkpoint data of the first checkpoint to the storage of the file system that uses copy on write to update data of the file system; indicating that any updates of file system objects that occur subsequent to the first set of updates are to be associated with a subsequent checkpoint; generating write plans for the first set of updates, each write plan indicating at least a planned location on the storage for data representing at least one of the first set of updates; updating a global table (310; 405) indicating allocation data of the file system as well as storage locations for file system objects (322, 323) modified by the write plans; obtaining a lock on the global table and creating a logical copy of the updated global table in a main memory, the lock preventing updating the global table while write plans for the other updates are allowed to be generated; releasing the lock and indicating that the subsequent checkpoint has been enabled and that subsequent updates are allowed to update the global table; creating a write plan to write the checkpoint data of the first checkpoint to the storage while allowing write plans to be generated for the subsequent updates in parallel with creating the write plan, the checkpoint data of the first checkpoint including the logical copy; after all updates of the first set of updates are successfully written to the storage, writing the checkpoint data to the storage, waiting for an acknowledgment that a flush has successfully completed, the flush writing all data, that has not already been written from a volatile memory to a non-volatile memory of the storage, to the non-volatile memory of the storage, writing a checkpoint record that includes a validation code, the validation code being for determining whether the first set of updates was correctly written to storage. writing the checkpoint data to the storage, waiting for an acknowledgment that a flush has successfully completed, the flush writing all data, that has not already been written from a volatile memory to a non-volatile memory of the storage, to the non-volatile memory of the storage, writing a checkpoint record that includes a validation code, the validation code being for determining whether the first set of updates was correctly written to storage.