Convert the global 'bioops' into per-mount bio_ops. For now we also have
to have a per buffer b_ops as well since the controlling filesystem cannot
be located from information in struct buf (b_vp could be the backing store
so that can't be used). This change allows HAMMER to use bio_ops.
Change the ordering of the bio_ops.io_deallocate call so it occurs before
the buffer's B_LOCKED is checked. This allows the deallocate call to set
B_LOCKED to retain the buffer in situations where the target filesystem
is unable to immediately disassociate the buffer. Also keep VMIO intact
for B_LOCKED buffers (in addition to B_DELWRI buffers).
HAMMER will use this feature to keep buffers passively associated with
other filesystem structures and thus be able to avoid constantly brelse()ing
and getblk()ing them.
14 files changed: