hammer2 - Flush asynchronization, bug fixes, stabilization
* Better-asynchronize the flush (sync) code. Generally split flushing
of inodes and flushing of topology above the inodes such that we can
flush the inodes inside a normal transaction.
This leaves only the topology flush in the flush transaction (which
locks out all other modifying transactions). Concurrent read/write/
flush performance is significantly improved.
* Fix numerous bugs in the inode tracking code where the chain topology
under an inode could wind up remaining in a modified state when the
vnode is in a clean state. This could cause hefty 'sync' latency on
clean trees (that had already been flushed).
* Fix numerous bugs in the handling of lost parent links, which occurs
due to locking races primarily when indirect blocks have to be
inserted or deleted.
* Deleted-chain sub-topology tracking had some issues which could lead
to chain's being lost, resulting in malloc complaints on umount.
* Rename a few H2 sysctl variables for readability.
* Adjust the "dumpchain" debugging directive to allow us to trace
the ONFLUSH topology.
12 files changed: