diff options
author | Michal Privoznik <mprivozn@redhat.com> | 2013-12-16 13:00:00 +0800 |
---|---|---|
committer | Michal Privoznik <mprivozn@redhat.com> | 2013-12-18 09:08:27 +0100 |
commit | b0579ed9005370fcc22684722412984eb64d0617 (patch) | |
tree | 42653bc21f3a3c6918b39e7e49c01fea596020eb /src/storage | |
parent | 5d7e4f0cf335235c09e4c2d797fe1cf870f5cba9 (diff) | |
download | libvirt-b0579ed9005370fcc22684722412984eb64d0617.tar.gz |
storage: resize vol against real allocated size
Currently, 'vol-resize --allocate' allocates new space at the
vol->capacity offset. But the vol->capacity is not necessarily the same
as vol->allocation. For instance:.
[root@localhost ~]# virsh vol-list --pool tmp-pool --details
Name Path Type Capacity Allocation
-------------------------------------------------------------
tmp-vol /root/tmp-pool/tmp-vol file 1.00 GiB 1.00 GiB
[root@localhost ~]# virsh vol-resize tmp-vol --pool tmp-pool 2G
[root@localhost ~]# virsh vol-list --pool tmp-pool --details
Name Path Type Capacity Allocation
-------------------------------------------------------------
tmp-vol /root/tmp-pool/tmp-vol file 2.00 GiB 1.00 GiB
So, if we want to allocate more bytes, so the file is say 3G big, the
real allocated size is 2G actually:
[root@localhost ~]# virsh vol-resize tmp-vol --pool tmp-pool 3G --allocate
[root@localhost ~]# virsh vol-list --pool tmp-pool --details
Name Path Type Capacity Allocation
-------------------------------------------------------------
tmp-vol /root/tmp-pool/tmp-vol file 3.00 GiB 2.00 GiB
This commit uses the correct vol->allocation instead of incorrect
vol->capacity, so the output of the commands above looks like this:
[root@localhost ~]# virsh vol-resize tmp-vol --pool tmp-pool 3G --allocate
[root@localhost ~]# virsh vol-list --pool tmp-pool --details
Name Path Type Capacity Allocation
-------------------------------------------------------------
tmp-vol /root/tmp-pool/tmp-vol file 3.00 GiB 3.00 GiB
Moreover, if the '--alocate' flag was used, we must update the
vol->allocation member in storageVolResize API too, not just
vol->capacity.
Reported-by: Wang Sen <wangsen@linux.vnet.ibm.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Diffstat (limited to 'src/storage')
-rw-r--r-- | src/storage/storage_backend_fs.c | 2 | ||||
-rw-r--r-- | src/storage/storage_driver.c | 2 |
2 files changed, 3 insertions, 1 deletions
diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c index 11cf2df3af..95783be500 100644 --- a/src/storage/storage_backend_fs.c +++ b/src/storage/storage_backend_fs.c @@ -1267,7 +1267,7 @@ virStorageBackendFileSystemVolResize(virConnectPtr conn ATTRIBUTE_UNUSED, if (vol->target.format == VIR_STORAGE_FILE_RAW) { return virStorageFileResize(vol->target.path, capacity, - vol->capacity, pre_allocate); + vol->allocation, pre_allocate); } else { if (pre_allocate) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index f08255ea0e..816efdae1f 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -2029,6 +2029,8 @@ storageVolResize(virStorageVolPtr obj, goto out; vol->capacity = abs_capacity; + if (flags & VIR_STORAGE_VOL_RESIZE_ALLOCATE) + vol->allocation = abs_capacity; /* Update pool metadata */ pool->def->allocation += (abs_capacity - vol->capacity); |