Filesystem Implementations

Some notes about filesystem implementations in various systems.

GNU Hurd

The hurd/fs.defs file contains interface definitions for the different filesystem operations.

Minix 3

The VFS-FS protocol may not be current, but it provides a useful insight into what Minix 3 does. Of particular interest is the algorithm for implementing the lookup request with regard to the path resolution REQ_LOOKUP message.

What seems to happen is that when resolving a filesystem path, where mountpoints are encountered, the EENTERMOUNT error code is returned, and the client effectively experiences a redirect to the next place to start looking. Also, relative path elements appear to be supported along with the ELEAVEMOUNT error code. Symbolic links are supported using a ESYMLINK error code.

HelenOS

Implementation and design of the file system layer describes the roles of the VFS server and "endpoint file system servers", the former providing the general filesystem structure with the latter providing actual file storage. The standard library acts as a front end to the VFS server, converting relative paths to absolute paths and offering POSIX function support.

The endpoint file system servers support a general interface. Where the sophistication of the filesystem demands it, this interface may be implemented using the libfs library which offers some functions for convenience as well as the appropriate interface types.

L4Re

A project was apparently undertaken to make FUSE available within L4Re: Porting FUSE to L4Re. This work introduced a library, libfs, that appears to act as a VFS filesystem. It communicates with a server that does the job of interfacing with the FUSE framework.

Filesystem Representations

Some references to representation: