vfs: Implement fallocate system call

This patch adds fallocate as a vnode operation, implements the
fallocate function and the system call.

Signed-off-by: Raphael S. Carvalho <raphaelsc@cloudius-systems.com>
Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
vfs: Fix corner-cases where stat variants report out-dated file size

It turns out that vnode->vn_size will not be always synchronized with the file
system underlying the vnode, and vn_stat will always provide its caller with
the file size known by the vfs layer. The latter is changed to get from the
fs instead.

Found the bug while using stat on a file (in zfs) after its was either truncated
or extended. We probably should change zfs later to update vnode->vn_size whenever
the respective znode->z_size is updated.

Signed-off-by: Raphael S. Carvalho <raphaelsc@cloudius-systems.com>
Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
zfs: Implement zfs_fallocate

1) zfs_fallocate is ported from ZFS on Linux along with convoff.
zfs_fallocate being limited to FALLOC_FL_PUNCH_HOLE alone, though
not useful as fallocate require FALLOC_FL_PUNCH_HOLE to be ORed
with FALLOC_FL_KEEP_SIZE.

2) (FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE) semantics is implemented
in zfs_fallocate. Relevant changes were introduced into zfs_space.

3) From my conversation with ZFS folks, I realized that FALLOC_FL_KEEP_SIZE
alone could be implemented, but it will probably take a long time, and wouldn't
give us the proportional value.

Signed-off-by: Raphael S. Carvalho <raphaelsc@cloudius-systems.com>
Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
tests: Add fallocate testcase

Signed-off-by: Raphael S. Carvalho <raphaelsc@cloudius-systems.com>
Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>