vhdx.c: replace QEMUOptionParameter with QemuOpts
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Dong Xu Wang <wdongxu@linux.vnet.ibm.com> Signed-off-by: Chunyan Liu <cyliu@suse.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
004b7f2522
commit
5366092c7a
99
block/vhdx.c
99
block/vhdx.c
|
@ -1723,8 +1723,7 @@ exit:
|
||||||
* .---- ~ ----------- ~ ------------ ~ ---------------- ~ -----------.
|
* .---- ~ ----------- ~ ------------ ~ ---------------- ~ -----------.
|
||||||
* 1MB
|
* 1MB
|
||||||
*/
|
*/
|
||||||
static int vhdx_create(const char *filename, QEMUOptionParameter *options,
|
static int vhdx_create(const char *filename, QemuOpts *opts, Error **errp)
|
||||||
Error **errp)
|
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
uint64_t image_size = (uint64_t) 2 * GiB;
|
uint64_t image_size = (uint64_t) 2 * GiB;
|
||||||
|
@ -1737,24 +1736,15 @@ static int vhdx_create(const char *filename, QEMUOptionParameter *options,
|
||||||
gunichar2 *creator = NULL;
|
gunichar2 *creator = NULL;
|
||||||
glong creator_items;
|
glong creator_items;
|
||||||
BlockDriverState *bs;
|
BlockDriverState *bs;
|
||||||
const char *type = NULL;
|
char *type = NULL;
|
||||||
VHDXImageType image_type;
|
VHDXImageType image_type;
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
|
|
||||||
while (options && options->name) {
|
image_size = qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0);
|
||||||
if (!strcmp(options->name, BLOCK_OPT_SIZE)) {
|
log_size = qemu_opt_get_size_del(opts, VHDX_BLOCK_OPT_LOG_SIZE, 0);
|
||||||
image_size = options->value.n;
|
block_size = qemu_opt_get_size_del(opts, VHDX_BLOCK_OPT_BLOCK_SIZE, 0);
|
||||||
} else if (!strcmp(options->name, VHDX_BLOCK_OPT_LOG_SIZE)) {
|
type = qemu_opt_get_del(opts, BLOCK_OPT_SUBFMT);
|
||||||
log_size = options->value.n;
|
use_zero_blocks = qemu_opt_get_bool_del(opts, VHDX_BLOCK_OPT_ZERO, false);
|
||||||
} else if (!strcmp(options->name, VHDX_BLOCK_OPT_BLOCK_SIZE)) {
|
|
||||||
block_size = options->value.n;
|
|
||||||
} else if (!strcmp(options->name, BLOCK_OPT_SUBFMT)) {
|
|
||||||
type = options->value.s;
|
|
||||||
} else if (!strcmp(options->name, VHDX_BLOCK_OPT_ZERO)) {
|
|
||||||
use_zero_blocks = options->value.n != 0;
|
|
||||||
}
|
|
||||||
options++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (image_size > VHDX_MAX_IMAGE_SIZE) {
|
if (image_size > VHDX_MAX_IMAGE_SIZE) {
|
||||||
error_setg_errno(errp, EINVAL, "Image size too large; max of 64TB");
|
error_setg_errno(errp, EINVAL, "Image size too large; max of 64TB");
|
||||||
|
@ -1763,7 +1753,7 @@ static int vhdx_create(const char *filename, QEMUOptionParameter *options,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == NULL) {
|
if (type == NULL) {
|
||||||
type = "dynamic";
|
type = g_strdup("dynamic");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strcmp(type, "dynamic")) {
|
if (!strcmp(type, "dynamic")) {
|
||||||
|
@ -1803,7 +1793,7 @@ static int vhdx_create(const char *filename, QEMUOptionParameter *options,
|
||||||
block_size = block_size > VHDX_BLOCK_SIZE_MAX ? VHDX_BLOCK_SIZE_MAX :
|
block_size = block_size > VHDX_BLOCK_SIZE_MAX ? VHDX_BLOCK_SIZE_MAX :
|
||||||
block_size;
|
block_size;
|
||||||
|
|
||||||
ret = bdrv_create_file(filename, options, NULL, &local_err);
|
ret = bdrv_create_file(filename, NULL, opts, &local_err);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
goto exit;
|
goto exit;
|
||||||
|
@ -1863,6 +1853,7 @@ static int vhdx_create(const char *filename, QEMUOptionParameter *options,
|
||||||
delete_and_exit:
|
delete_and_exit:
|
||||||
bdrv_unref(bs);
|
bdrv_unref(bs);
|
||||||
exit:
|
exit:
|
||||||
|
g_free(type);
|
||||||
g_free(creator);
|
g_free(creator);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1885,37 +1876,41 @@ static int vhdx_check(BlockDriverState *bs, BdrvCheckResult *result,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static QEMUOptionParameter vhdx_create_options[] = {
|
static QemuOptsList vhdx_create_opts = {
|
||||||
{
|
.name = "vhdx-create-opts",
|
||||||
.name = BLOCK_OPT_SIZE,
|
.head = QTAILQ_HEAD_INITIALIZER(vhdx_create_opts.head),
|
||||||
.type = OPT_SIZE,
|
.desc = {
|
||||||
.help = "Virtual disk size; max of 64TB."
|
{
|
||||||
},
|
.name = BLOCK_OPT_SIZE,
|
||||||
{
|
.type = QEMU_OPT_SIZE,
|
||||||
.name = VHDX_BLOCK_OPT_LOG_SIZE,
|
.help = "Virtual disk size; max of 64TB."
|
||||||
.type = OPT_SIZE,
|
},
|
||||||
.value.n = 1 * MiB,
|
{
|
||||||
.help = "Log size; min 1MB."
|
.name = VHDX_BLOCK_OPT_LOG_SIZE,
|
||||||
},
|
.type = QEMU_OPT_SIZE,
|
||||||
{
|
.def_value_str = stringify(DEFAULT_LOG_SIZE),
|
||||||
.name = VHDX_BLOCK_OPT_BLOCK_SIZE,
|
.help = "Log size; min 1MB."
|
||||||
.type = OPT_SIZE,
|
},
|
||||||
.value.n = 0,
|
{
|
||||||
.help = "Block Size; min 1MB, max 256MB. " \
|
.name = VHDX_BLOCK_OPT_BLOCK_SIZE,
|
||||||
"0 means auto-calculate based on image size."
|
.type = QEMU_OPT_SIZE,
|
||||||
},
|
.def_value_str = stringify(0),
|
||||||
{
|
.help = "Block Size; min 1MB, max 256MB. " \
|
||||||
.name = BLOCK_OPT_SUBFMT,
|
"0 means auto-calculate based on image size."
|
||||||
.type = OPT_STRING,
|
},
|
||||||
.help = "VHDX format type, can be either 'dynamic' or 'fixed'. "\
|
{
|
||||||
"Default is 'dynamic'."
|
.name = BLOCK_OPT_SUBFMT,
|
||||||
},
|
.type = QEMU_OPT_STRING,
|
||||||
{
|
.help = "VHDX format type, can be either 'dynamic' or 'fixed'. "\
|
||||||
.name = VHDX_BLOCK_OPT_ZERO,
|
"Default is 'dynamic'."
|
||||||
.type = OPT_FLAG,
|
},
|
||||||
.help = "Force use of payload blocks of type 'ZERO'. Non-standard."
|
{
|
||||||
},
|
.name = VHDX_BLOCK_OPT_ZERO,
|
||||||
{ NULL }
|
.type = QEMU_OPT_BOOL,
|
||||||
|
.help = "Force use of payload blocks of type 'ZERO'. Non-standard."
|
||||||
|
},
|
||||||
|
{ NULL }
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static BlockDriver bdrv_vhdx = {
|
static BlockDriver bdrv_vhdx = {
|
||||||
|
@ -1927,11 +1922,11 @@ static BlockDriver bdrv_vhdx = {
|
||||||
.bdrv_reopen_prepare = vhdx_reopen_prepare,
|
.bdrv_reopen_prepare = vhdx_reopen_prepare,
|
||||||
.bdrv_co_readv = vhdx_co_readv,
|
.bdrv_co_readv = vhdx_co_readv,
|
||||||
.bdrv_co_writev = vhdx_co_writev,
|
.bdrv_co_writev = vhdx_co_writev,
|
||||||
.bdrv_create = vhdx_create,
|
.bdrv_create2 = vhdx_create,
|
||||||
.bdrv_get_info = vhdx_get_info,
|
.bdrv_get_info = vhdx_get_info,
|
||||||
.bdrv_check = vhdx_check,
|
.bdrv_check = vhdx_check,
|
||||||
|
|
||||||
.create_options = vhdx_create_options,
|
.create_opts = &vhdx_create_opts,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void bdrv_vhdx_init(void)
|
static void bdrv_vhdx_init(void)
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#define GiB (MiB * 1024)
|
#define GiB (MiB * 1024)
|
||||||
#define TiB ((uint64_t) GiB * 1024)
|
#define TiB ((uint64_t) GiB * 1024)
|
||||||
|
|
||||||
|
#define DEFAULT_LOG_SIZE 1048576 /* 1MiB */
|
||||||
/* Structures and fields present in the VHDX file */
|
/* Structures and fields present in the VHDX file */
|
||||||
|
|
||||||
/* The header section has the following blocks,
|
/* The header section has the following blocks,
|
||||||
|
|
Loading…
Reference in New Issue