Microsoft Azure demands that fixed VHD images are a whole number

of megabytes. This is on top of having the image rounded to the
matching geometry of the image size.
By rounding up to the next MB after rounding to the geometry, we
lost idempotency. Subsequent calls to resize the image will keep
increasing the image size.

Tested by: gjb@
This commit is contained in:
Marcel Moolenaar 2015-06-21 01:44:27 +00:00
parent 4537ca4ef6
commit eebf77ccef
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=284656

View File

@ -365,6 +365,11 @@ vhd_fix_resize(lba_t imgsz)
struct vhd_geom geom;
int64_t imagesz;
/*
* Round the image size to the pre-determined geometry that
* matches the image size. This circular dependency implies
* that we need to loop to handle boundary conditions.
*/
imgsz *= secsz;
imagesz = imgsz;
while (1) {
@ -375,6 +380,10 @@ vhd_fix_resize(lba_t imgsz)
break;
imagesz += geom.heads * geom.sectors * VHD_SECTOR_SIZE;
}
/*
* Azure demands that images are a whole number of megabytes.
*/
imagesz = (imagesz + 0xfffffULL) & ~0xfffffULL;
return (image_set_size(imagesz / secsz));
}