DragonFly users List (threaded) for 2012-09
Re: modifying nullfs
:honestly, i think about some kind of abstraction layer over HammerFS,
:that's why a stackable FS impressed me.
Stackable FS's are always interesting, but they are also full of
The NFS server implementation is a good example.. when you export
a filesystem via NFS the NFS client has to talk to the NFS server
and that's essentially creating a stacking layer on top of the
original filesystem being exported by the server.
There are three primary problems with any stacking filesystem:
* Coherency if someone goes and does something to a file or directory
(like remove or rename it) via the underlying filesystem. The
stacked filesystem doesn't know about it.
* Tracking the vnode associations is particularly difficult because
you can't just keep the pairs of vnodes (the overlayed vnode and
the underlying vnode) referenced all the time. There are too many.
In particular, even just leaving the underlying vnodes referenced
creates a real problem for the kernel's vnode cache management code
because it can only hold a limited number of vnodes.
(The NFS server handles this by not keeping a permanent ref on the
vnodes requested by clients. Instead it can force clients to
re-lookup the filename and re-establish any vnode association it
had removed from the cache. It works for most cases but does not
work well for the open-descriptor-after-unlinking case and can cause
serious confusion when multiple NFS clients rename the same file or
* And overhead. When you have a stacked filesystem (such as a NFS
server), verses a filesystem alias (such as NULLFS), the stacked
filesystem has considerable kernel memory overhead to track the
stacking which creates a memory management issue if you try to
stack very large filesystems.o
Another example of a stacked filesystem would be the UFS union mount
(unionfs) in FreeBSD. It was removed from DragonFly and has had
endemic problems in FreeBSD for, oh, ever since it was written. It
depended heavily on the 'VOP_WHITEOUT' feature which is something only
UFS really supports, and not very well at that because directory-entry
whiteouts can't really be backed up. The union filesystem tried to
stack two real filesystem and present essentially a 'writable snapshot'
as the mount.
So it's a very interesting area but complex and difficult to implement
properly under any circumstances.