Persistent file systems require permanent state. To increase performance and fault tolerance, the state might typically be stored on a local disk, but remote file servers could be used just as well.
Figure fig-fs-persistent shows what happens when file system Y interposes on top of file system X. In that respect it is similar to an in-core file system. However, file system Y also uses an auxiliary file system W.
An example stateful file system is Cachefs (Appendix sec-appendix-typical-persistent-cachefs), a file system that is used as a cache by another file system. When the file system is re-mounted the cache could be used again, subject to consistency constraints.
I require that operations on the state-storing file system be vnode operations. This has two benefits:
The restriction brings two disadvantages:
I think, however, that the benefits to my restriction outweigh the disadvantages. I intend to devise a state-storing file system using FiST, called Statefs. This file system -- described in detail in Appendix sec-appendix-typical-in-core-statefs -- will do nothing more than record state for another file system. Statefs will operate inside the kernel, hopefully making its performance a non-issue.
For example, consider the Versionfs file system described in Appendix sec-appendix-typical-persistent-versionfs. Unix file systems do not have versioning capabilities. If one wanted to add version information per file, without modifying the implementation or content of an existing file system, one would have to store the version information in an auxiliary location, and somehow correlate data in the unmodified file system with the auxiliary location. With FiST, one could create a file system that interposes onto two others: the unmodified data file system, and the auxiliary location. The latter can be any type of file system. FiST provides the facilities to make the necessary correlations between the ``source'' file system and the ``auxiliary'' one that is used for storing the extra versioning information. This auxiliary file system is Statefs.
Note that Statefs is an in-core file system. Although it requires storage for itself, the storage need never be interposed upon, and therefore is not considered ``state'' which would make Statefs a persistent file system.