1. Unified the block cloning and Direct I/O code paths further. As part
of this unification, it is important to outline that Direct I/O
writes transition the db_state to DB_UNCACHED. This is used so that
dbuf_unoverride() is called when dbuf_undirty() is called. This is
needed to cleanup space accounting in a TXG. When a dbuf is redirtied
through dbuf_redirty(), then dbuf_unoverride() is also called to
clean up space accounting. This is a bit of a different approach that
block cloning, which always calls dbuf_undirty().
2. As part of uniying the two, Direct I/O also performs the same check
in dmu_buf_will_fill() so that on failure the previous contents of
the dbuf are set correctly.
3. General just code cleanup removing checks that are no longer
necessary.
Signed-off-by: Brian Atkinson <batkinson@lanl.gov>