It has been a long time since the previous status report; I'm sorry for that, but I haven't been able to publish one earlier. The good thing is I'm finally back from my vacations, so I'll able to work on tmpfs more seriously and continuously from now on (and I have to!).

Anyway, to the point of this post. I've just pushed all the changes I had in my work tree to the mainstream CVS server. Most of these changes focused on adding new vnode operations (none of them were implemented when I posted the previous entry), although there have been multiple improvements all around the code too.

As regards vnode operations, I started by adding simple ones, such as access, getattr and setattr (the later was rather long, but still quite straighforward). These were untestable on their own, so I continued by adding lookup and mkdir. After these two, I was able to create directories in the mounted file-system, but unable to see them. So I wrote the readdir operation and... voila! ls(1) started to show items and I discovered problems in setattr (how not!).

I have to mention that existing code (specially from FFS) was very useful to write these operations (detailed documentation could be better, of course). Also, I noticed that several file-systems have duplicated code, such as permission/flags checking. I wonder if this could be abstracted somewhere for consistency (i.e., some macros or inlined functions), but this is something I shouldn't touch for now.

At last, I implemented the rmdir hook. It works, but unfortunately it seems to cause some corruption that makes the system crash later on when reusing items from a pool (with a "free list modified"-style panic). This can be reproduced using the regression tests. I haven't discovered the point of the failure yet, although I have been debugging it for a long time... I'll have to ask the gurus from tech-kern@ which possible problems can cause this error.

By the way, while writing this code, I've found multiple mistakes in manual pages that I plan to fix in the following days (have collected a long to-do list). Some of these are just typos, but others are more serious (inconsistencies with descriptions and existing code).

Take a look at the existing code and stay tuned!