I'm entering the production phase of the project, and the code is starting to come together. I've decided to base my architecture off of ext2fsd, which--although very complex--has many features that would otherwise be hard for me to replicate (FastIO, asynchronous I/O, caching, pageable code sections, directory notifications, wildcarding). Perhaps the more important reason is that ext2fsd is relatively bug free when compared to romfs or ext2ifs.
Constructing a diff between ffsdrv and ext2fsd showed where to expect critical code changes (although this was a bit misleading, since EXT2 is very similar to FFS). Using Doxygen, I generated callgraphs for ext2fsd, and have been documenting the code, and its architecture.
I've dived into pushing functionality into this new code base. So far, the superblock can be loaded, and the root directory's stat data and directory listing can be obtained. This means I can mount the drive, switch to it, type 'dir,' and have approximately the right thing happen.
The difficult thing about this is that ReiserFS is very different from EXT2 in terms of its on-disk structures. It takes significant effort to identify how ext2fsd has to change in order to accomodate these differences. This is made more difficult by the fact that, while it isolates IFS-specific from FS-specific code far better than any of the alternatives, the decoupling is nowhere near perfect.
Perhaps someday in the distant future I'll unify the code bases of ffsdrv, ext2fsd, and rfsd... but for now, the focus is on parsing the complete stat data and directory information out of the tree.
Log in to post a comment.