3f702f5 virStorageFileResize: fallocate the whole capacity

Authored and Committed by Ján Tomko 6 years ago
    virStorageFileResize: fallocate the whole capacity
    
    We have been trying to implement the ALLOCATE flag to mean
    "the volume should be fully allocated after the resize".
    
    Since commit b0579ed9 we do not allocate from the existing
    capacity, but from the existing allocation value.
    However this value is a total of all the allocated bytes,
    not an offset.
    
    For a sparsely allocated file:
    $ perl -e 'print "x"x8192;' > vol1
    $ fallocate -p -o 0 -l 4096 vol1
    $ virsh vol-info vol1 default
    Capacity:       8.00 KiB
    Allocation:     4.00 KiB
    
    Treating allocation as an offset would result in an incompletely
    allocated file:
    $ virsh vol-resize vol1 --pool default 16384 --allocate
    Capacity:       16.00 KiB
    Allocation:     12.00 KiB
    
    Call fallocate from zero on the whole requested capacity to fully
    allocate the file. After that, the volume is fully allocated
    after the resize:
    $ virsh vol-resize vol1 --pool default 16384 --allocate
    $ virsh vol-info vol1 default
    Capacity:       16.00 KiB
    Allocation:     16.00 KiB
    
        
file modified
+1 -2
file modified
+1 -7
file modified
+0 -1