From 9e4751b3a9c0435c4cb199c353144acb55458473 Mon Sep 17 00:00:00 2001 From: Sebastian Mitterle Date: Sat, 29 Aug 2020 00:49:07 +0000 Subject: [PATCH 027/108] 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 Reviewed-by: Michal Privoznik (cherry picked from commit 653fdf48e352814efdbff72aa5421f65385088ac) --- src/storage/storage_backend_disk.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/storage/storage_backend_disk.c b/src/storage/storage_backend_disk.c index eae23ec24a..da06357b90 100644 --- a/src/storage/storage_backend_disk.c +++ b/src/storage/storage_backend_disk.c @@ -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; -- 2.33.0