Google Summer of Code 2010 is now over. It was a wonderful experience, and I learned a lot about Haiku’s internals, about file system development, and about myself. I successfully completed my proposal to a point an initial version of the Ext3 file system is available to the Haiku kernel for testing. There are some things that remain to be completed, like sparse files, proper revoke support, multi-transaction truncation and some more thorough testing, but overall, it was successful.
The fundamental parts of the journal code are finished. Although they still need more testing, and they can change as more of the Ext3 code is written, they are ready for supporting the first steps in write support for ext2 and ext3 volumes. This blog post explains the code, and how it is organized to handle ext2 and ext3 volumes.
The first milestone of the ext3 implementation was to have read support. Since ext2 read support is already implemented, the only missing feature (as far as I can tell) for ext3 read implementation was support for indexed directories. In ext3, indexed directories use a tree structured called HTree. This tree has a fixed depth and its keys are file name hashes. Each node of the tree is a file system block inside the directory file (ie. linked by the directory i-node).
Haiku currently has ext2 read-only support. My project is to extend the code to allow for full ext3 support. The code will be MIT licensed and will be object-oriented (inspired by Haiku’s BFS implementation), allowing for easy understanding, learning and maintainability.
The full Google Summer of Code application follows: