qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, mreitz@redhat.com, den@openvz.org,
	jcody@redhat.com, eblake@redhat.com, berrange@redhat.com,
	qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH for-2.12 01/12] vdi: Change 'static' create option to 'preallocation' in QMP
Date: Tue, 20 Mar 2018 18:36:21 +0100	[thread overview]
Message-ID: <20180320173632.25480-2-kwolf@redhat.com> (raw)
In-Reply-To: <20180320173632.25480-1-kwolf@redhat.com>

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 <kwolf@redhat.com>
---
 qapi/block-core.json |  6 ++----
 block/vdi.c          | 24 ++++++++++++++++++++++--
 2 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/qapi/block-core.json b/qapi/block-core.json
index 5b0ad1a8b7..f6673f2b13 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -3834,16 +3834,14 @@
 #
 # @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 (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

  reply	other threads:[~2018-03-20 17:36 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-20 17:36 [Qemu-devel] [PATCH for-2.12 00/12] block: Follow-up for .bdrv_co_create (part 1) Kevin Wolf
2018-03-20 17:36 ` Kevin Wolf [this message]
2018-03-20 18:09   ` [Qemu-devel] [PATCH for-2.12 01/12] vdi: Change 'static' create option to 'preallocation' in QMP Eric Blake
2018-03-20 17:36 ` [Qemu-devel] [PATCH for-2.12 02/12] vdi: Fix build with CONFIG_VDI_DEBUG Kevin Wolf
2018-03-20 18:18   ` Eric Blake
2018-03-20 17:36 ` [Qemu-devel] [PATCH for-2.12 03/12] qemu-iotests: Test vdi image creation with QMP Kevin Wolf
2018-03-20 18:23   ` Eric Blake
2018-03-20 17:36 ` [Qemu-devel] [PATCH for-2.12 04/12] qemu-iotests: Enable 025 for luks Kevin Wolf
2018-03-20 18:25   ` Eric Blake
2018-03-21  9:32   ` Daniel P. Berrangé
2018-03-20 17:36 ` [Qemu-devel] [PATCH for-2.12 05/12] luks: Turn another invalid assertion into check Kevin Wolf
2018-03-20 18:26   ` Eric Blake
2018-03-21  9:31   ` Daniel P. Berrangé
2018-03-20 17:36 ` [Qemu-devel] [PATCH for-2.12 06/12] qemu-iotests: Test invalid resize on luks Kevin Wolf
2018-03-20 18:33   ` Eric Blake
2018-03-21 17:22     ` Kevin Wolf
2018-03-21  9:31   ` Daniel P. Berrangé
2018-03-20 17:36 ` [Qemu-devel] [PATCH for-2.12 07/12] parallels: Check maximum cluster size on create Kevin Wolf
2018-03-20 18:34   ` Eric Blake
2018-03-20 17:36 ` [Qemu-devel] [PATCH for-2.12 08/12] qemu-iotests: Test parallels image creation with QMP Kevin Wolf
2018-03-20 18:42   ` Eric Blake
2018-03-21 17:21     ` Kevin Wolf
2018-03-20 17:36 ` [Qemu-devel] [PATCH for-2.12 09/12] vhdx: Require power-of-two block size on create Kevin Wolf
2018-03-20 18:43   ` Eric Blake
2018-03-21 13:03   ` Jeff Cody
2018-03-20 17:36 ` [Qemu-devel] [PATCH for-2.12 10/12] vhdx: Don't use error_setg_errno() with constant errno Kevin Wolf
2018-03-20 18:45   ` Eric Blake
2018-03-21 13:04   ` Jeff Cody
2018-03-20 17:36 ` [Qemu-devel] [PATCH for-2.12 11/12] vhdx: Check for 4 GB maximum log size on creation Kevin Wolf
2018-03-20 18:45   ` Eric Blake
2018-03-21 13:10   ` Jeff Cody
2018-03-20 17:36 ` [Qemu-devel] [PATCH for-2.12 12/12] qemu-iotests: Test vhdx image creation with QMP Kevin Wolf
2018-03-20 18:53   ` Eric Blake
2018-03-21 17:26     ` Kevin Wolf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180320173632.25480-2-kwolf@redhat.com \
    --to=kwolf@redhat.com \
    --cc=berrange@redhat.com \
    --cc=den@openvz.org \
    --cc=eblake@redhat.com \
    --cc=jcody@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).