~kvik/unionfs

Remove flush note retry loop

The retry loop was intended to make sure that we flush the
process, but the approach is very brittle. For one, user none
isn't allowed to send notes at all which would cause this
loop to get stuck forever.

For now, flushing isn't going to work at all if you run unionfs
under 'none'.
Implement Tflush handling

This patch implements Tflush message handling for Topen,
Tread, and Twrite requests.  These are the most common things
you'd happen to flush, but it's worth noting that unionfs,
being a proxying server, does potentially blocking system
calls while handling most of the requests.  At some point I'll
add that, perhaps when I figure out some more imaginative way
of doing it.
Fix relative branch paths
Release mountpoint as soon as possible
Forgot to copy Dir.length, oops
Make error checks consistent
Close fd on error
Don't sysfatal on bind error
Use /mnt/exportfs mntgen
Remove realpath instead of path
Implement deduplication of directory entries
Fix String shenanigans
Use Strings for paths

This reduces the amount of obnoxious allocations and copying.
Fix merge
Rewrite and simplify the whole lot

Directory reads are done using union binds which allows
removal of a bunch of code.
Fid state management is simplified. Instead of refcounting
clones etc. we just copy everything, which makes things
easier to reason about and removes the need to introduce
locking for FILE structs.
Various other minor improvements are included as well.
Forgottten the qmap.c file...
Simplify branch code, improve naming
Improve Qid mapping strategy and implementation
Remove another unnecessary check
Next