hammer2 - Stabilization, optimization
* Increase the hammer2_io.refs field to 64 bits so we can add a few more
control bits.
* Track whether invalidation is ok at the DIO level for full-sized (64KB)
data blocks. We continue to use the slightly less-capable CHAIN_DEDUP
flag for smaller data blocks (this flag gets set on frontend->backend
flush whereas the DIO level flag is only cleared when a block is actually
reused for deduplication).
* Separate vfs.hammer2.cluster_enable into cluster_read and cluster_write.
Leave cluster_read enabled with a read-ahead of 4 blocks. Disable
cluster_write for now, but still set B_CLUSTEROK in the bdwrite().
This allows the frontend to 'flush' data to the backend without
initiating disk I/O on the block device, giving us a chance to discard
the data later if it winds up being temporary.
* Remove an improper BUF_KERNPROC(dio->bp) in the case where a different
thread owns the in-progress DIO.
* Defer setting of B_INVAL | B_RELBUF to when the DIO is in lastdrop.
* Add missing brelse() in the hammer2_read_file() error path. Add missing
B_CLUSTEROK in hammer2_write_file().
* The bulkfree code now ensures that the INVALOK bit in any related DIO
for a freed block is cleared, preventing accidental invalidations on
reuse.