A non-transitory computer-readable medium storing computer-executable instructions that when executed by a computer cause the computer to perform a method implementing a multi-threaded message passing journal, the method comprising:
- controlling messaging between transaction threads associated with the multi-threaded message passing journal and a reservation thread associated with the multi-threaded message passing journal;
- controlling messaging between the transaction threads and a sequencing thread associated with the multi-threaded message passing journal,
- controlling messaging between the sequencing thread and a reservation thread,
- controlling messaging between the transaction threads and a completion thread,
- receiving a file system transaction into the transaction threads,
- producing a set of atomic operations corresponding to the file system operation, where the set of atomic operations depends, at least in part, on operations supported by a storage, and where producing the set of atomic operations includes acquiring a journal entry buffer to store a journal entry concerning a member of the set of atomic operations, and populating the journal entry buffer with the journal entry,
- producing a set of journal entries corresponding to the set of atomic operations,
- upon determining that insufficient space to accommodate the set of journal entries is available in the storage, controlling the transaction thread to send a reserve space message to the reservation thread to request a reservation of space sufficient to accommodate the set of journal entries in the storage,
- controlling the transaction thread to send an operation ready message concerning a member of the set of atomic operations to the sequencing thread,
- controlling the sequencing thread to obtain input/output buffer space for writing the members of the set of atomic operations to the storage and to message a device thread to write a journal entry associated with the operation ready message to the storage in the space reserved for the set of journal entries,
- controlling the completion thread to send a completion message to the reservation thread upon determining that the set of journal entries has been written to the storage and that the set of atomic operations has completed successfully,
- controlling the completion thread to send a request flush message to the commitment thread, where the request flush message indicates that a portion of in-memory metadata should be flushed to disk,
- controlling the reservation thread to reclaim space in the storage upon determining that the portion of in-memory metadata has been flushed to disk, and
- controlling the sequencing thread to send the completion message to a commitment thread upon determining that the set of journal entries has been written to the storage and that the set of atomic operations has completed successfully, where the commitment thread is configured to selectively move metadata associated with the file associated with the file system transaction from a first transient storage location accessible to the file system to a second non-transient storage location accessible to the file system,
- where the reservation thread is configured to manage space in storage where the set of journal entries are to be stored to protect the file system during execution of the file system transaction,
- where the sequencing thread is configured to interact with device threads that performs input/output of the set of journal entries to the storage, and
- where the completion thread is configured to track metadata items that have been modified in memory and that are only protected by journal entries in the storage and to monitor completion of the set of atomic operations.