Master branch and 3.0 release branch performance & disk use fixes

From:

Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxx>

Date:

Tue, 1 May 2012 19:21:05 -0700 (PDT)

The following fixes have gone into master and also been MFC'd to the
release branch (commitids for master):
b642a6c1f5bbb295e29522d99c65038f459288ac
kernel - Fix degenerate cluster_write() cases
66030e2b4635359f2d84f23298c9d8ce1e6af5da
HAMMER VFS - Only set B_CLUSTEROK on 64K buffers
This fixes a serious performance issue which we introduced when we
turned on the cluster buf code in HAMMER. The code inadvertently
removed a file EOF check that caused fragmentory writes to the
end of a file to immediately flush to disk, greatly reducing filesystem
performance by causing excessive writes to disk as well as temporary
blocking conditions due to the I/O in progress.
Since HAMMER does allocate-on-flush this also caused bloated
filesystem space usage. The space would be recovered automatically
by the nightly hammer cleanup code but in the mean time could eat a
huge amount of space (4x to 25x) when writing out a file.
There was also a 'zeros in file' bug reported for HAMMER which I
believe these commits should get rid of.
-Matt
Matthew Dillon
<dillon@backplane.com>