mirror of https://gitee.com/openkylin/libvirt.git
disk storage: fix allocation size for pool format dos
The changed condition was always false because the function was always called with boundary values 0. Use the free extent's start value to get its start offset from the cylinder boundary and determine if the needed size for allocation needs to be expanded too in case the offset doesn't fit within extra bytes for alignment. This fixes an issue where vol-create-from will call qemu-img convert to create a destination volume of same capacity as the source volume and qemu-img will error 'Cannot grow device files' due to the partition being too small for the source although both destination partition and source volume have the same capacity. Signed-off-by: Sebastian Mitterle <smitterl@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
d3ac12e3a1
commit
653fdf48e3
|
@ -691,7 +691,7 @@ virStorageBackendDiskPartBoundaries(virStoragePoolObjPtr pool,
|
|||
if (def->source.format == VIR_STORAGE_POOL_DISK_DOS) {
|
||||
/* align to cylinder boundary */
|
||||
neededSize += extraBytes;
|
||||
if ((*start % cylinderSize) > extraBytes) {
|
||||
if ((dev->freeExtents[i].start % cylinderSize) > extraBytes) {
|
||||
/* add an extra cylinder if the offset can't fit within
|
||||
the extra bytes we have */
|
||||
neededSize += cylinderSize;
|
||||
|
|
Loading…
Reference in New Issue