A transactional file system wherein multiple file system operations may be
performed as a transaction. An application specifies that file
system-related operations are to be handled as a transaction, and the
application is given a file handle associated with a transaction context.
For file system requests associated with a transaction context, a file
system component manages the operations consistent with transactional
behavior. The component provides data isolation by providing multiple
versions of a file by tracking copies of changed pages, such that
transactional readers do not receive changes to a file made by
transactional writers, until the transactional writer commits the
transaction and the reader reopens the file. The component handles
namespace logging operations in a multiple-level log that facilitates
logging and recovery. Page data is logged separate from the main log,
with a unique signature that enables the log to determine whether a page
was fully flushed to disk.