FUSE Userspace File System update


Project Status: Complete

FreeBSD’s fuse(4) driver is buggy and out-of-date. It’s essentially unusable
for any networked filesystem like CephFS, MooseFS, or Tahoe-LAFS. This
project will fix all of fuse’s known bugs, update the kernel API, and add a
new test suite.

FUSE (Filesystem in USErspace) allows FreeBSD systems to mount
filesystems that are serviced by a userspace daemon, and most FUSE
daemons are easily portable to FreeBSD. As of this writing, the ports
tree contains 41 FUSE filesystems.The most popular is fuse-ntfs, which
is the only way to access Microsoft NTFS-formatted media using
FreeBSD.

Fuse(4) is usable, but buggy and incomplete. At the beginning of this
project there were 26 open bugs in the bug tracker, some of which have
been open for years. The worst are the bugs relating to cacheing,
which can cause data corruption in any FUSE network filesystem (11 of
those that are in ports, plus some important out-of-ports filesystems
like CephFS and MooseFS).

Fuse(4)’s kernel API (the communication protocol between the kernel
and the file system daemon) is about 11 years behind the standard.
That means we can’t support some features relating to cache
invalidation, ioctl(2), poll(2), chflags(2), file locking, utimes(2),
posix_fallocate(2), and ACLs. We’re also missing some
performance-enhancing features like readdirplus, async direct io,
writeback cacheing, SEEK_HOLE, and asynchronous reads.

This project will fix all of fuse’s known bugs, update the kernel API, and
add a new test suite.

Completion during Summer 2019.