Port PUFFS from NetBSD/FreeBSD

nickprok

Abstract

There is no user level file systems support in DragonFlyBSD. But several implementations exist for other operating systems: de-facto standard FUSE (with ports to FreeBSD, Solaris and MacOS X) and PUFFS from NetBSD, witch contains user space library for FUSE API. On top of PUFFS there is rump which makes possible using file systems as user space servers.

Additional Information

I'm going to use original NetBSD implementation as a base of my port and use FreeBSD port as additional source of information. PUFFS has straightforward design, as name suggests it's "pass-to-userspace framework file system". I also propose to port librefuse library emulating FUSE API. Porting PUFFS can be considered a first step in adding support for file systems as user space servers (http://www.netbsd.org/docs/puffs/rump.html). VFS in Dragonfly is rather different from NetBSD: * Adds new vnode operations, replacing old versions * Different vnode locking scheme * Different file name cache/lookup scheme I'd like to make PUFFS interface identical to kernel level VFS implementation and add wrappers at user level similar to vop_compat_*. That would allow to have rump port easily which would allow to test new file system code as a user space process without addition overhead.

Code samples