Re: [PATCH] storage: resize vol against real allocated size

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



tested with dir type.

[root@localhost ~]# virsh vol-create-as tmp-pool tmp-vol 1G
Vol tmp-vol created
[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
 Size of volume 'tmp-vol' successfully changed to 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
[root@localhost ~]# virsh vol-resize tmp-vol --pool tmp-pool 3G --allocate
 Size of volume 'tmp-vol' successfully changed to 3G
[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

On Mon, Dec 16, 2013 at 02:29:15PM +0100, Michal Privoznik wrote:
> From: Wang Sen <wangsen@xxxxxxxxxxxxxxxxxx>
> 
> 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@xxxxxxxxxxxxxxxxxx>
> Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx>
> ---
>  src/storage/storage_backend_fs.c | 2 +-
>  src/storage/storage_driver.c     | 2 ++
>  2 files changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c
> index 11cf2df..95783be 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 f08255e..816efda 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);
> -- 
> 1.8.5.1
> 
> --
> libvir-list mailing list
> libvir-list@xxxxxxxxxx
> https://www.redhat.com/mailman/listinfo/libvir-list
> 

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]