[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 3/4] block/vpc: give option to force the current_siz
From: |
Jeff Cody |
Subject: |
[Qemu-devel] [PATCH 3/4] block/vpc: give option to force the current_size field in .bdrv_create |
Date: |
Tue, 23 Feb 2016 19:47:57 -0500 |
When QEMU creates a VHD image, it goes by the original spec,
calculating the current_size based on the nearest CHS geometry (with an
exception for disks > 127GB).
Apparently, Azure will only allow images that are sized to the nearest
MB, and the current_size as calculated from CHS cannot guarantee that.
Allow QEMU to create images similar to how Hyper-V creates images, by
setting current_size to the specified virtual disk size. This
introduces an option, force_size, to be passed to the vpc format during
image creation, e.g.:
qemu-img convert -f raw -o force_size -O vpc test.img test.vhd
Bug reference: https://bugs.launchpad.net/qemu/+bug/1490611
Signed-off-by: Jeff Cody <address@hidden>
---
block/vpc.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/block/vpc.c b/block/vpc.c
index 54a38a7..48ef16e 100644
--- a/block/vpc.c
+++ b/block/vpc.c
@@ -49,6 +49,8 @@ enum vhd_type {
#define VHD_MAX_SECTORS (65535LL * 255 * 255)
#define VHD_MAX_GEOMETRY (65535LL * 16 * 255)
+#define VPC_OPT_FORCE_SIZE "force_size"
+
// always big-endian
typedef struct vhd_footer {
char creator[8]; // "conectix"
@@ -850,6 +852,7 @@ static int vpc_create(const char *filename, QemuOpts *opts,
Error **errp)
int64_t total_size;
int disk_type;
int ret = -EIO;
+ bool force_size;
Error *local_err = NULL;
BlockDriverState *bs = NULL;
@@ -870,6 +873,8 @@ static int vpc_create(const char *filename, QemuOpts *opts,
Error **errp)
disk_type = VHD_DYNAMIC;
}
+ force_size = qemu_opt_get_bool_del(opts, VPC_OPT_FORCE_SIZE, false);
+
ret = bdrv_create_file(filename, opts, &local_err);
if (ret < 0) {
error_propagate(errp, local_err);
@@ -896,7 +901,8 @@ static int vpc_create(const char *filename, QemuOpts *opts,
Error **errp)
calculate_geometry(total_sectors + i, &cyls, &heads, &secs_per_cyl);
}
- if ((int64_t)cyls * heads * secs_per_cyl == VHD_MAX_GEOMETRY) {
+ if ((int64_t)cyls * heads * secs_per_cyl == VHD_MAX_GEOMETRY ||
+ force_size) {
total_sectors = total_size / BDRV_SECTOR_SIZE;
/* Allow a maximum disk size of approximately 2 TB */
if (total_sectors > VHD_MAX_SECTORS) {
@@ -994,6 +1000,13 @@ static QemuOptsList vpc_create_opts = {
"Type of virtual hard disk format. Supported formats are "
"{dynamic (default) | fixed} "
},
+ {
+ .name = VPC_OPT_FORCE_SIZE,
+ .type = QEMU_OPT_BOOL,
+ .help = "Force disk size calculation to use the actual size "
+ "specified, rather than using the nearest CHS-based "
+ "calculation"
+ },
{ /* end of list */ }
}
};
--
1.9.3
- [Qemu-devel] [PATCH 0/4] VHD/VPC format compatibility, Jeff Cody, 2016/02/23
- [Qemu-devel] [PATCH 1/4] block/vpc: choose size calculation method based on creator_app field, Jeff Cody, 2016/02/23
- [Qemu-devel] [PATCH 3/4] block/vpc: give option to force the current_size field in .bdrv_create,
Jeff Cody <=
- Re: [Qemu-devel] [PATCH 3/4] block/vpc: give option to force the current_size field in .bdrv_create, Kevin Wolf, 2016/02/24
- Re: [Qemu-devel] [PATCH 3/4] block/vpc: give option to force the current_size field in .bdrv_create, Jeff Cody, 2016/02/24
- Re: [Qemu-devel] [PATCH 3/4] block/vpc: give option to force the current_size field in .bdrv_create, Peter Lieven, 2016/02/24
- Re: [Qemu-devel] [PATCH 3/4] block/vpc: give option to force the current_size field in .bdrv_create, Kevin Wolf, 2016/02/24
- Re: [Qemu-devel] [PATCH 3/4] block/vpc: give option to force the current_size field in .bdrv_create, Jeff Cody, 2016/02/24
- Re: [Qemu-devel] [PATCH 3/4] block/vpc: give option to force the current_size field in .bdrv_create, Peter Lieven, 2016/02/24
- Re: [Qemu-devel] [PATCH 3/4] block/vpc: give option to force the current_size field in .bdrv_create, Jeff Cody, 2016/02/24
- Re: [Qemu-devel] [PATCH 3/4] block/vpc: give option to force the current_size field in .bdrv_create, Peter Lieven, 2016/02/24
[Qemu-devel] [PATCH 2/4] block/vpc: tests for auto-detecting VPC and Hyper-V VHD images, Jeff Cody, 2016/02/23