mirror of https://github.com/xqemu/xqemu.git
vpc: Fix size in fixed image creation
If total_sectors is rounded to match the geometry, total_size needs to be changed as well. Otherwise we end up with an image whose geometry describes a disk larger than the image file, which doesn't end well. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
7c2eed3efa
commit
3f3f20dcd3
|
@ -801,6 +801,7 @@ static int vpc_create(const char *filename, QemuOpts *opts, Error **errp)
|
||||||
}
|
}
|
||||||
|
|
||||||
total_sectors = (int64_t) cyls * heads * secs_per_cyl;
|
total_sectors = (int64_t) cyls * heads * secs_per_cyl;
|
||||||
|
total_size = total_sectors * BDRV_SECTOR_SIZE;
|
||||||
|
|
||||||
/* Prepare the Hard Disk Footer */
|
/* Prepare the Hard Disk Footer */
|
||||||
memset(buf, 0, 1024);
|
memset(buf, 0, 1024);
|
||||||
|
@ -822,13 +823,8 @@ static int vpc_create(const char *filename, QemuOpts *opts, Error **errp)
|
||||||
/* Version of Virtual PC 2007 */
|
/* Version of Virtual PC 2007 */
|
||||||
footer->major = cpu_to_be16(0x0005);
|
footer->major = cpu_to_be16(0x0005);
|
||||||
footer->minor = cpu_to_be16(0x0003);
|
footer->minor = cpu_to_be16(0x0003);
|
||||||
if (disk_type == VHD_DYNAMIC) {
|
|
||||||
footer->orig_size = cpu_to_be64(total_sectors * 512);
|
|
||||||
footer->size = cpu_to_be64(total_sectors * 512);
|
|
||||||
} else {
|
|
||||||
footer->orig_size = cpu_to_be64(total_size);
|
footer->orig_size = cpu_to_be64(total_size);
|
||||||
footer->size = cpu_to_be64(total_size);
|
footer->size = cpu_to_be64(total_size);
|
||||||
}
|
|
||||||
footer->cyls = cpu_to_be16(cyls);
|
footer->cyls = cpu_to_be16(cyls);
|
||||||
footer->heads = heads;
|
footer->heads = heads;
|
||||||
footer->secs_per_cyl = secs_per_cyl;
|
footer->secs_per_cyl = secs_per_cyl;
|
||||||
|
|
Loading…
Reference in New Issue