From: Max Reitz <mreitz@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
qemu-block@nongnu.org, qemu-devel@nongnu.org
Cc: kwolf@redhat.com, armbru@redhat.com, eblake@redhat.com,
jsnow@redhat.com, famz@redhat.com, den@openvz.org,
stefanha@redhat.com, pbonzini@redhat.com
Subject: Re: [Qemu-devel] [PATCH 17/22] qmp: add autoload parameter to block-dirty-bitmap-add
Date: Mon, 10 Oct 2016 18:25:37 +0200 [thread overview]
Message-ID: <db88c5c8-9612-81f0-cd8d-9b192e433992@redhat.com> (raw)
In-Reply-To: <1475232808-4852-18-git-send-email-vsementsov@virtuozzo.com>
[-- Attachment #1: Type: text/plain, Size: 5668 bytes --]
On 30.09.2016 12:53, Vladimir Sementsov-Ogievskiy wrote:
> Optional. Default is false.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> Signed-off-by: Denis V. Lunev <den@openvz.org>
> ---
> blockdev.c | 22 ++++++++++++++++++++--
> qapi/block-core.json | 7 ++++++-
> qmp-commands.hx | 5 ++++-
> 3 files changed, 30 insertions(+), 4 deletions(-)
Design question: I see that being able to specify these flags when
creating bitmaps is useful. However, would about a way for the user to
change these flags on an existing dirty bitmap? Would you consider that
useful?
(Of course, if so, it can always be added later, we don't need it now.)
> diff --git a/blockdev.c b/blockdev.c
> index ec0ec75..00da7a1 100644
> --- a/blockdev.c
> +++ b/blockdev.c
> @@ -1992,6 +1992,7 @@ static void block_dirty_bitmap_add_prepare(BlkActionState *common,
> qmp_block_dirty_bitmap_add(action->node, action->name,
> action->has_granularity, action->granularity,
> action->has_persistent, action->persistent,
> + action->has_autoload, action->autoload,
> &local_err);
>
> if (!local_err) {
> @@ -2696,6 +2697,7 @@ out:
> void qmp_block_dirty_bitmap_add(const char *node, const char *name,
> bool has_granularity, uint32_t granularity,
> bool has_persistent, bool persistent,
> + bool has_autoload, bool autoload,
> Error **errp)
> {
> AioContext *aio_context;
> @@ -2729,10 +2731,26 @@ void qmp_block_dirty_bitmap_add(const char *node, const char *name,
> if (!has_persistent) {
> persistent = false;
> }
> + if (!has_autoload) {
> + autoload = false;
> + }
> +
> + if (autoload && !persistent) {
> + error_setg(errp, "Autoload flag must be used only for persistent"
> + "bitmaps");
Missing space between "persistent" and "bitmaps".
Also, technically I think you should throw this error if has_autoload is
true instead of autoload. I would consider it wrong if a user specified
autoload at all, even autoload=false, without setting persistent=true.
But if you disagree, then please keep the condition the way it is.
> + goto out;
> + }
>
> bitmap = bdrv_create_dirty_bitmap(bs, granularity, name, errp);
> - if (bitmap != NULL) {
> - bdrv_dirty_bitmap_set_persistance(bitmap, persistent);
> + if (bitmap == NULL) {
> + goto out;
> + }
> +
> + if (persistent) {
> + bdrv_dirty_bitmap_set_persistance(bitmap, true);
> + if (autoload) {
> + bdrv_dirty_bitmap_set_autoload(bitmap, true);
> + }
By the way, a simpler way to do the same would be just
bdrv_dirty_bitmap_set_persistance(bitmap, persistent);
bdrv_dirty_bitmap_set_autoload(bitmap, autoload);
But if you prefer this explicit style, that's fine, too.
> }
>
> out:
> diff --git a/qapi/block-core.json b/qapi/block-core.json
> index 2bf56cd..087a681 100644
> --- a/qapi/block-core.json
> +++ b/qapi/block-core.json
> @@ -1239,11 +1239,16 @@
> # corresponding block device on it's close. Default is false.
> # For block-dirty-bitmap-add. (Since 2.8)
> #
> +# @autoload: #optional the bitmap will be autoloaded on it's storage image
> +# open.
I'd rephrase this like "The bitmap will be automatically loaded when the
image it is stored in is opened." (Or keep "autoloaded" instead of
"automatically loaded", that doesn't really matter.)
> This flag is only for persistent bitmap and needed to inform
> +# block driver that bitmap should be autoloaded on the next image
> +# open.
Again, the user doesn't really have to care how the internals work. All
they need to know is that the image will be automatically loaded when
the image is opened the next time, and that is something the first
sentence told them already.
(Of course, "This flag may only be specified for persistent bitmaps"
should stay.)
> Default is false. For block-dirty-bitmap-add. (Since 2.8)
Again, I don't see the point of the last sentence.
Max
> +#
> # Since 2.4
> ##
> { 'struct': 'BlockDirtyBitmapAdd',
> 'data': { 'node': 'str', 'name': 'str', '*granularity': 'uint32',
> - '*persistent': 'bool' } }
> + '*persistent': 'bool', '*autoload': 'bool' } }
>
> ##
> # @block-dirty-bitmap-add
> diff --git a/qmp-commands.hx b/qmp-commands.hx
> index 434b418..8f4e841 100644
> --- a/qmp-commands.hx
> +++ b/qmp-commands.hx
> @@ -1441,7 +1441,7 @@ EQMP
>
> {
> .name = "block-dirty-bitmap-add",
> - .args_type = "node:B,name:s,granularity:i?,persistent:b?",
> + .args_type = "node:B,name:s,granularity:i?,persistent:b?,autoload:b?",
> .mhandler.cmd_new = qmp_marshal_block_dirty_bitmap_add,
> },
>
> @@ -1461,6 +1461,9 @@ Arguments:
> - "persistent": bitmap will be saved to corresponding block device
> on it's close. Block driver should maintain persistent bitmaps
> (json-bool, optional, default false) (Since 2.8)
> +- "autoload": only for persistent bitmaps. Bitmap will be autoloaded on it's
> + storage image open. (json-bool, optional, default false)
> + (Since 2.8)
>
> Example:
>
>
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 480 bytes --]
next prev parent reply other threads:[~2016-10-10 16:26 UTC|newest]
Thread overview: 100+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-30 10:53 [Qemu-devel] [PATCH v7 00/22] qcow2: persistent dirty bitmaps Vladimir Sementsov-Ogievskiy
2016-09-30 10:53 ` [Qemu-devel] [PATCH 01/22] hbitmap: improve dirty iter Vladimir Sementsov-Ogievskiy
2016-10-01 13:52 ` Max Reitz
2016-09-30 10:53 ` [Qemu-devel] [PATCH 02/22] tests: add hbitmap iter test Vladimir Sementsov-Ogievskiy
2016-10-01 14:02 ` Max Reitz
2016-09-30 10:53 ` [Qemu-devel] [PATCH 03/22] block: fix bdrv_dirty_bitmap_granularity signature Vladimir Sementsov-Ogievskiy
2016-09-30 10:53 ` [Qemu-devel] [PATCH 04/22] block/dirty-bitmap: add deserialize_ones func Vladimir Sementsov-Ogievskiy
2016-09-30 10:53 ` [Qemu-devel] [PATCH 05/22] qcow2-bitmap: structs and consts Vladimir Sementsov-Ogievskiy
2016-10-01 14:34 ` Max Reitz
2016-10-01 14:56 ` Max Reitz
2016-10-07 13:11 ` Vladimir Sementsov-Ogievskiy
2016-10-11 11:50 ` Vladimir Sementsov-Ogievskiy
2016-10-12 18:20 ` Max Reitz
2016-09-30 10:53 ` [Qemu-devel] [PATCH 06/22] qcow2: add dirty bitmaps extension Vladimir Sementsov-Ogievskiy
2016-10-01 14:46 ` Max Reitz
2016-10-11 12:09 ` Vladimir Sementsov-Ogievskiy
2016-10-12 18:21 ` Max Reitz
2016-10-13 12:18 ` Vladimir Sementsov-Ogievskiy
2016-09-30 10:53 ` [Qemu-devel] [PATCH 07/22] qcow2-bitmap: introduce auto-loading bitmaps Vladimir Sementsov-Ogievskiy
2016-10-01 16:26 ` Max Reitz
2016-10-14 18:44 ` Vladimir Sementsov-Ogievskiy
2016-10-15 17:03 ` Max Reitz
2016-10-15 17:22 ` Vladimir Sementsov-Ogievskiy
2016-10-20 12:22 ` Vladimir Sementsov-Ogievskiy
2016-10-21 19:49 ` Max Reitz
2016-10-07 19:25 ` Max Reitz
2016-10-21 11:59 ` Vladimir Sementsov-Ogievskiy
2016-10-21 19:56 ` Max Reitz
2016-09-30 10:53 ` [Qemu-devel] [PATCH 08/22] block/dirty-bitmap: add autoload field to BdrvDirtyBitmap Vladimir Sementsov-Ogievskiy
2016-10-07 17:05 ` Max Reitz
2016-09-30 10:53 ` [Qemu-devel] [PATCH 09/22] block: introduce persistent dirty bitmaps Vladimir Sementsov-Ogievskiy
2016-10-07 17:54 ` Max Reitz
2016-10-11 13:11 ` Vladimir Sementsov-Ogievskiy
2016-10-12 18:24 ` Max Reitz
2016-10-07 19:28 ` Max Reitz
2016-10-12 11:38 ` Vladimir Sementsov-Ogievskiy
2016-10-12 12:30 ` Vladimir Sementsov-Ogievskiy
2016-10-12 18:25 ` Max Reitz
2016-09-30 10:53 ` [Qemu-devel] [PATCH 10/22] block/dirty-bitmap: add bdrv_dirty_bitmap_next() Vladimir Sementsov-Ogievskiy
2016-10-07 18:11 ` Max Reitz
2016-09-30 10:53 ` [Qemu-devel] [PATCH 11/22] qcow2-bitmap: add qcow2_store_persistent_bitmaps() Vladimir Sementsov-Ogievskiy
2016-10-07 19:24 ` Max Reitz
2016-10-13 16:48 ` Vladimir Sementsov-Ogievskiy
2016-10-15 16:40 ` Max Reitz
2016-10-17 17:19 ` Vladimir Sementsov-Ogievskiy
2016-10-21 19:44 ` Max Reitz
2016-10-21 21:04 ` Eric Blake
2016-10-17 17:57 ` Vladimir Sementsov-Ogievskiy
2016-10-17 17:58 ` [Qemu-devel] DROP THIS " Vladimir Sementsov-Ogievskiy
2016-09-30 10:53 ` [Qemu-devel] [PATCH 12/22] qcow2-bitmap: add IN_USE flag Vladimir Sementsov-Ogievskiy
2016-10-07 19:44 ` Max Reitz
2016-10-21 15:34 ` Vladimir Sementsov-Ogievskiy
2016-10-21 19:58 ` Max Reitz
2016-10-24 10:32 ` Vladimir Sementsov-Ogievskiy
2016-10-24 11:35 ` Vladimir Sementsov-Ogievskiy
2016-10-24 17:08 ` Max Reitz
2016-10-24 17:18 ` Max Reitz
2016-10-25 10:53 ` Vladimir Sementsov-Ogievskiy
2016-10-26 9:04 ` Vladimir Sementsov-Ogievskiy
2016-10-26 9:21 ` Vladimir Sementsov-Ogievskiy
2016-10-26 12:13 ` Vladimir Sementsov-Ogievskiy
2016-10-26 13:02 ` Vladimir Sementsov-Ogievskiy
2016-10-26 15:28 ` Max Reitz
2016-11-07 16:12 ` Vladimir Sementsov-Ogievskiy
2016-11-07 16:18 ` Max Reitz
2016-10-24 16:54 ` Max Reitz
2016-09-30 10:53 ` [Qemu-devel] [PATCH 13/22] qcow2-bitmap: check constraints Vladimir Sementsov-Ogievskiy
2016-10-07 19:54 ` Max Reitz
2016-09-30 10:53 ` [Qemu-devel] [PATCH 14/22] qcow2: delete bitmaps on truncate Vladimir Sementsov-Ogievskiy
2016-10-07 19:58 ` Max Reitz
2016-09-30 10:53 ` [Qemu-devel] [PATCH 15/22] qcow2-bitmap: add autoclear bit Vladimir Sementsov-Ogievskiy
2016-10-07 20:11 ` Max Reitz
2016-10-24 14:25 ` Vladimir Sementsov-Ogievskiy
2016-10-24 17:21 ` Max Reitz
2016-09-30 10:53 ` [Qemu-devel] [PATCH 16/22] qmp: add persistent flag to block-dirty-bitmap-add Vladimir Sementsov-Ogievskiy
2016-10-07 19:52 ` Eric Blake
2016-10-24 14:44 ` Vladimir Sementsov-Ogievskiy
2016-10-10 16:08 ` Max Reitz
2016-10-24 15:12 ` Vladimir Sementsov-Ogievskiy
2016-10-24 17:30 ` Max Reitz
2016-10-25 11:05 ` Vladimir Sementsov-Ogievskiy
2016-09-30 10:53 ` [Qemu-devel] [PATCH 17/22] qmp: add autoload parameter " Vladimir Sementsov-Ogievskiy
2016-10-07 19:53 ` Eric Blake
2016-10-10 16:25 ` Max Reitz [this message]
2016-10-24 15:55 ` Vladimir Sementsov-Ogievskiy
2016-09-30 10:53 ` [Qemu-devel] [PATCH 18/22] qapi: add md5 checksum of last dirty bitmap level to query-block Vladimir Sementsov-Ogievskiy
2016-10-10 16:44 ` Max Reitz
2016-10-10 17:03 ` Max Reitz
2016-10-10 19:22 ` Eric Blake
2016-09-30 10:53 ` [Qemu-devel] [PATCH 19/22] iotests: test qcow2 persistent dirty bitmap Vladimir Sementsov-Ogievskiy
2016-10-10 17:04 ` Max Reitz
2016-09-30 10:53 ` [Qemu-devel] [PATCH 20/22] qcow2-dirty-bitmap: refcounts Vladimir Sementsov-Ogievskiy
2016-10-10 17:59 ` Max Reitz
2016-09-30 10:53 ` [Qemu-devel] [PATCH 21/22] specs/qcow2: fix bitmap granularity qemu-specific note Vladimir Sementsov-Ogievskiy
2016-10-07 20:18 ` Eric Blake
2016-11-09 16:43 ` Vladimir Sementsov-Ogievskiy
2016-09-30 10:53 ` [Qemu-devel] [PATCH 22/22] specs/qcow2: do not use wording 'bitmap header' Vladimir Sementsov-Ogievskiy
2016-10-07 20:20 ` Eric Blake
2016-10-01 13:37 ` [Qemu-devel] [PATCH v7 00/22] qcow2: persistent dirty bitmaps Max Reitz
2016-10-13 18:11 ` John Snow
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=db88c5c8-9612-81f0-cd8d-9b192e433992@redhat.com \
--to=mreitz@redhat.com \
--cc=armbru@redhat.com \
--cc=den@openvz.org \
--cc=eblake@redhat.com \
--cc=famz@redhat.com \
--cc=jsnow@redhat.com \
--cc=kwolf@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=vsementsov@virtuozzo.com \
/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).