[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 08/19] vdi: Change 'static' create option to 'preallo
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PULL 08/19] vdi: Change 'static' create option to 'preallocation' in QMP |
Date: |
Mon, 26 Mar 2018 16:35:49 +0200 |
What static=on really does is what we call metadata preallocation for
other block drivers. While we can still change the QMP interface, make
it more consistent by using 'preallocation' for VDI, too.
This doesn't implement any new functionality, so the only supported
preallocation modes are 'off' and 'metadata' for now.
Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
qapi/block-core.json | 7 +++----
block/vdi.c | 24 ++++++++++++++++++++++--
2 files changed, 25 insertions(+), 6 deletions(-)
diff --git a/qapi/block-core.json b/qapi/block-core.json
index 1088ab0c78..c50517bff3 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -3943,16 +3943,15 @@
#
# @file Node to create the image format on
# @size Size of the virtual disk in bytes
-# @static Whether to create a statically (true) or
-# dynamically (false) allocated image
-# (default: false, i.e. dynamic)
+# @preallocation Preallocation mode for the new image (allowed values: off,
+# metadata; default: off)
#
# Since: 2.12
##
{ 'struct': 'BlockdevCreateOptionsVdi',
'data': { 'file': 'BlockdevRef',
'size': 'size',
- '*static': 'bool' } }
+ '*preallocation': 'PreallocMode' } }
##
# @BlockdevVhdxSubformat:
diff --git a/block/vdi.c b/block/vdi.c
index d939b034c4..73c059e69d 100644
--- a/block/vdi.c
+++ b/block/vdi.c
@@ -728,7 +728,7 @@ static int coroutine_fn
vdi_co_do_create(BlockdevCreateOptions *create_options,
int ret = 0;
uint64_t bytes = 0;
uint32_t blocks;
- uint32_t image_type = VDI_TYPE_DYNAMIC;
+ uint32_t image_type;
VdiHeader header;
size_t i;
size_t bmap_size;
@@ -744,9 +744,22 @@ static int coroutine_fn
vdi_co_do_create(BlockdevCreateOptions *create_options,
/* Validate options and set default values */
bytes = vdi_opts->size;
- if (vdi_opts->q_static) {
+
+ if (!vdi_opts->has_preallocation) {
+ vdi_opts->preallocation = PREALLOC_MODE_OFF;
+ }
+ switch (vdi_opts->preallocation) {
+ case PREALLOC_MODE_OFF:
+ image_type = VDI_TYPE_DYNAMIC;
+ break;
+ case PREALLOC_MODE_METADATA:
image_type = VDI_TYPE_STATIC;
+ break;
+ default:
+ error_setg(errp, "Preallocation mode not supported for vdi");
+ return -EINVAL;
}
+
#ifndef CONFIG_VDI_STATIC_IMAGE
if (image_type == VDI_TYPE_STATIC) {
ret = -ENOTSUP;
@@ -874,6 +887,7 @@ static int coroutine_fn vdi_co_create_opts(const char
*filename, QemuOpts *opts,
BlockdevCreateOptions *create_options = NULL;
BlockDriverState *bs_file = NULL;
uint64_t block_size = DEFAULT_CLUSTER_SIZE;
+ bool is_static = false;
Visitor *v;
Error *local_err = NULL;
int ret;
@@ -895,6 +909,9 @@ static int coroutine_fn vdi_co_create_opts(const char
*filename, QemuOpts *opts,
goto done;
}
#endif
+ if (qemu_opt_get_bool_del(opts, BLOCK_OPT_STATIC, false)) {
+ is_static = true;
+ }
qdict = qemu_opts_to_qdict_filtered(opts, NULL, &vdi_create_opts, true);
@@ -913,6 +930,9 @@ static int coroutine_fn vdi_co_create_opts(const char
*filename, QemuOpts *opts,
qdict_put_str(qdict, "driver", "vdi");
qdict_put_str(qdict, "file", bs_file->node_name);
+ if (is_static) {
+ qdict_put_str(qdict, "preallocation", "metadata");
+ }
/* Get the QAPI object */
v = qobject_input_visitor_new_keyval(QOBJECT(qdict));
--
2.13.6
- [Qemu-devel] [PULL 00/19] Block layer patches, Kevin Wolf, 2018/03/26
- [Qemu-devel] [PULL 03/19] block/quorum: Remove protocol-related fields, Kevin Wolf, 2018/03/26
- [Qemu-devel] [PULL 05/19] block/blkreplay: Remove protocol-related fields, Kevin Wolf, 2018/03/26
- [Qemu-devel] [PULL 01/19] iotests: 163 is not quick, Kevin Wolf, 2018/03/26
- [Qemu-devel] [PULL 06/19] include/block/block_int: Document protocol related functions, Kevin Wolf, 2018/03/26
- [Qemu-devel] [PULL 02/19] block/replication: Remove protocol_name field, Kevin Wolf, 2018/03/26
- [Qemu-devel] [PULL 04/19] block/throttle: Remove protocol-related fields, Kevin Wolf, 2018/03/26
- [Qemu-devel] [PULL 09/19] vdi: Fix build with CONFIG_VDI_DEBUG, Kevin Wolf, 2018/03/26
- [Qemu-devel] [PULL 11/19] qemu-iotests: Enable 025 for luks, Kevin Wolf, 2018/03/26
- [Qemu-devel] [PULL 08/19] vdi: Change 'static' create option to 'preallocation' in QMP,
Kevin Wolf <=
- [Qemu-devel] [PULL 13/19] qemu-iotests: Test invalid resize on luks, Kevin Wolf, 2018/03/26
- [Qemu-devel] [PULL 10/19] qemu-iotests: Test vdi image creation with QMP, Kevin Wolf, 2018/03/26
- [Qemu-devel] [PULL 14/19] parallels: Check maximum cluster size on create, Kevin Wolf, 2018/03/26
- [Qemu-devel] [PULL 12/19] luks: Turn another invalid assertion into check, Kevin Wolf, 2018/03/26
- [Qemu-devel] [PULL 16/19] vhdx: Require power-of-two block size on create, Kevin Wolf, 2018/03/26
- [Qemu-devel] [PULL 07/19] qcow2: Reset free_cluster_index when allocating a new refcount block, Kevin Wolf, 2018/03/26
- [Qemu-devel] [PULL 17/19] vhdx: Don't use error_setg_errno() with constant errno, Kevin Wolf, 2018/03/26
- [Qemu-devel] [PULL 18/19] vhdx: Check for 4 GB maximum log size on creation, Kevin Wolf, 2018/03/26
- [Qemu-devel] [PULL 15/19] qemu-iotests: Test parallels image creation with QMP, Kevin Wolf, 2018/03/26
- [Qemu-devel] [PULL 19/19] qemu-iotests: Test vhdx image creation with QMP, Kevin Wolf, 2018/03/26