In some situations it is desirable to have a file system that is not backed by
actual disk storage, but only by anonymous memory, i.e. lives in the RAM (and
possibly swap space).

A simplistic way to implement such a memory filesystem is literally creating a
ramdisk, i.e. simply allocating a big chunk of RAM (called a memory store in
Hurd terminology), and create a normal filesystem like ext2 on that. However,
this is not very efficient, and not very convenient either (the filesystem
needs to be recreated each time the ramdisk is invoked). A nicer solution is
having a real tmpfs, which creates all filesystem
structures directly in RAM, allocating memory on demand.

The Hurd has had such a tmpfs for a long time. However, the existing
implementation doesn't work anymore -- it got broken by changes in other parts
of the Hurd design.

There are several issues. The most serious known problem seems to be that for
technical reasons it receives RPCs from two different
sources on one port, and gets mixed up with them. Fixing
this is non-trivial, and requires a good understanding of the involved
mechanisms.

The goal of this project is to get a fully working, full featured tmpfs
implementation. It requires digging into some parts of the Hurd, including the
pager interface and translator programming. This
task probably doesn't require any design work, only good debugging skills.

Possible mentors: Carl Fredrik Hammar (cfhammar)

Exercise: Take a look at tmpfs and try to fix one of the existing issues. Some
of them are probably not too tricky; or you might discover something else you
could improve while working on it. If you don't find anything obvious, contact
us about a different exercise task.

Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license
is included in the section entitled GNU Free Documentation
License.