hammer2 - stabilization - blogbench, others
* Fix some (but not all) issues with lost chains on unmount that show
up in a kmalloc pool warning.
* Fix a bug in hammer2_chain_create_indirect() which retained a stale
{ base, count } across possible parent chain modifications, resulting
in corruption and/or a panic.
* Track chain lock counts on a per-thread basis and add some helpful
assertions in the XOP processing loop. Also add
hammer2_chain_push_shared_lock() and hammer2_chain_pull_shared_lock()
to helpfully transfer ownership of (shared locks only) between threads.
* Add missing cpu_lfence() after fifo read index test. Ensures that
the memory load of the chain occurs after the write index change has
been detected.
* Change the XOP ABI a bit. hammer2_xop_feed() now replicates the
shared lock, giving one to the collector and allowing the caller
to retain its own. This way the locking state of the chain passed
to it does not change from the point of view of the caller.
This also fixes one or two lost chain locks in the XOPs.