All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Snow <jsnow@redhat.com>
To: Max Reitz <mreitz@redhat.com>, qemu-devel@nongnu.org
Cc: kwolf@redhat.com, vsementsov@parallels.com, famz@redhat.com,
	armbru@redhat.com, stefanha@redhat.com
Subject: Re: [Qemu-devel] [PATCH v11 07/13] qmp: Add block-dirty-bitmap-enable and block-dirty-bitmap-disable
Date: Fri, 16 Jan 2015 12:09:40 -0500	[thread overview]
Message-ID: <54B945D4.2090603@redhat.com> (raw)
In-Reply-To: <54B93C15.6000804@redhat.com>



On 01/16/2015 11:28 AM, Max Reitz wrote:
> On 2015-01-12 at 11:30, John Snow wrote:
>> From: Fam Zheng <famz@redhat.com>
>>
>> This allows to put the dirty bitmap into a disabled state where no more
>> writes will be tracked.
>>
>> It will be used before backup or writing to persistent file.
>>
>> Signed-off-by: Fam Zheng <famz@redhat.com>
>> Signed-off-by: John Snow <jsnow@redhat.com>
>> ---
>>   block.c               | 24 +++++++++++++++++++++++-
>>   blockdev.c            | 40 ++++++++++++++++++++++++++++++++++++++++
>>   include/block/block.h |  3 +++
>>   qapi/block-core.json  | 28 ++++++++++++++++++++++++++++
>>   qmp-commands.hx       | 10 ++++++++++
>>   5 files changed, 104 insertions(+), 1 deletion(-)
>>
>> diff --git a/block.c b/block.c
>> index 7bf7079..bd4b449 100644
>> --- a/block.c
>> +++ b/block.c
>> @@ -56,6 +56,7 @@ struct BdrvDirtyBitmap {
>>       int64_t size;
>>       int64_t granularity;
>>       char *name;
>> +    bool enabled;
>>       QLIST_ENTRY(BdrvDirtyBitmap) list;
>>   };
>> @@ -5373,10 +5374,16 @@ BdrvDirtyBitmap
>> *bdrv_create_dirty_bitmap(BlockDriverState *bs,
>>       bitmap->granularity = granularity;
>>       bitmap->bitmap = hbitmap_alloc(bitmap->size,
>> ffs(sector_granularity) - 1);
>>       bitmap->name = g_strdup(name);
>> +    bitmap->enabled = true;
>>       QLIST_INSERT_HEAD(&bs->dirty_bitmaps, bitmap, list);
>>       return bitmap;
>>   }
>> +bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap)
>> +{
>> +    return bitmap->enabled;
>> +}
>> +
>>   void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap
>> *bitmap)
>>   {
>>       BdrvDirtyBitmap *bm, *next;
>> @@ -5391,6 +5398,16 @@ void bdrv_release_dirty_bitmap(BlockDriverState
>> *bs, BdrvDirtyBitmap *bitmap)
>>       }
>>   }
>> +void bdrv_disable_dirty_bitmap(BdrvDirtyBitmap *bitmap)
>> +{
>> +    bitmap->enabled = false;
>> +}
>> +
>> +void bdrv_enable_dirty_bitmap(BdrvDirtyBitmap *bitmap)
>> +{
>> +    bitmap->enabled = true;
>> +}
>> +
>>   BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs)
>>   {
>>       BdrvDirtyBitmap *bm;
>> @@ -5458,7 +5475,9 @@ void bdrv_dirty_iter_init(BlockDriverState *bs,
>>   void bdrv_set_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap
>> *bitmap,
>>                              int64_t cur_sector, int nr_sectors)
>>   {
>> -    hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
>> +    if (bdrv_dirty_bitmap_enabled(bitmap)) {
>> +        hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
>> +    }
>
> Why are you checking whether the bitmap is enabled here in
> bdrv_set_dirty_bitmap(), but neither in bdrv_reset_dirty_bitmap() nor
> bdrv_clear_dirty_bitmap()?
>
> It seems consistent with the commit message which only states that
> disabled state means that no more writes (i.e. bdrv_set_dirty_bitmap())
> will be tracked, but it still seems strange to me.
>
>>   }
>>   void bdrv_reset_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap
>> *bitmap,
>> @@ -5481,6 +5500,9 @@ static void bdrv_set_dirty(BlockDriverState *bs,
>> int64_t cur_sector,
>>   {
>>       BdrvDirtyBitmap *bitmap;
>>       QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
>> +        if (!bdrv_dirty_bitmap_enabled(bitmap)) {
>> +            continue;
>> +        }
>
> Same question as above, only this time it's about bdrv_reset_dirty().
>
> In case the answer to the question is "that's intentional":
>
> Reviewed-by: Max Reitz <mreitz@redhat.com>
>

Just because it's intentional doesn't make it a good idea.

Fam is currently suggesting we might just scrap the "enable/disable" and 
"frozen/normal" modes altogether in favor of a single unified status, 
but the original way he proposed enabled/disabled is that it simply, and 
exclusively enabled/disabled new writes to the bitmap -- it never was 
intended to block clears/resets.

So the bitmap is still able to be consumed while disabled, for instance.

How useful is this? Perhaps not very useful. Probably more confusing 
than useful.

I will *probably* try to unify these parameters as Fam suggested, but I 
am really eager to hear from Markus on the QMP interface side before I 
bother sending out another minor iteration.

I'll skip the R-b for now, since Fam had some ideas on how to make it nicer.

Thanks!
--js

  reply	other threads:[~2015-01-16 17:09 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-12 16:30 [Qemu-devel] [PATCH v11 00/13] block: Incremental backup series John Snow
2015-01-12 16:30 ` [Qemu-devel] [PATCH v11 01/13] block: fix spoiling all dirty bitmaps by mirror and migration John Snow
2015-01-13 15:54   ` Vladimir Sementsov-Ogievskiy
2015-01-12 16:30 ` [Qemu-devel] [PATCH v11 02/13] qapi: Add optional field "name" to block dirty bitmap John Snow
2015-01-12 16:30 ` [Qemu-devel] [PATCH v11 03/13] qmp: Add block-dirty-bitmap-add and block-dirty-bitmap-remove John Snow
2015-01-16 15:36   ` Max Reitz
2015-01-16 16:48     ` John Snow
2015-01-16 16:51       ` Max Reitz
2015-01-16 16:54         ` John Snow
2015-01-19 10:08       ` Markus Armbruster
2015-01-19 21:05         ` John Snow
2015-01-20  8:26           ` Markus Armbruster
2015-01-20 16:48             ` John Snow
2015-01-21  9:34               ` Markus Armbruster
2015-01-21 15:51                 ` Eric Blake
2015-01-30 14:32                 ` Kevin Wolf
2015-01-30 17:04                   ` John Snow
2015-01-30 18:52                     ` Kevin Wolf
2015-02-02 10:10                       ` Markus Armbruster
2015-02-02 21:40                         ` John Snow
2015-01-29 13:55   ` Vladimir Sementsov-Ogievskiy
2015-01-12 16:30 ` [Qemu-devel] [PATCH v11 04/13] block: Introduce bdrv_dirty_bitmap_granularity() John Snow
2015-01-16 15:40   ` Max Reitz
2015-01-12 16:30 ` [Qemu-devel] [PATCH v11 05/13] block: Add bdrv_clear_dirty_bitmap John Snow
2015-01-16 15:56   ` Max Reitz
2015-01-12 16:30 ` [Qemu-devel] [PATCH v11 06/13] hbitmap: add hbitmap_merge John Snow
2015-01-16 16:12   ` Max Reitz
2015-01-12 16:30 ` [Qemu-devel] [PATCH v11 07/13] qmp: Add block-dirty-bitmap-enable and block-dirty-bitmap-disable John Snow
2015-01-16 16:28   ` Max Reitz
2015-01-16 17:09     ` John Snow [this message]
2015-01-12 16:31 ` [Qemu-devel] [PATCH v11 08/13] block: Add bitmap successors John Snow
2015-01-13  9:24   ` Fam Zheng
2015-01-13 17:26     ` John Snow
2015-01-16 18:22     ` John Snow
2015-01-19  1:00       ` Fam Zheng
2015-01-12 16:31 ` [Qemu-devel] [PATCH v11 09/13] qmp: Add support of "dirty-bitmap" sync mode for drive-backup John Snow
2015-01-13  9:37   ` Fam Zheng
2015-01-13 17:50     ` John Snow
2015-01-14  6:29       ` Fam Zheng
2015-01-16 17:52   ` Max Reitz
2015-01-16 17:59     ` John Snow
2015-01-12 16:31 ` [Qemu-devel] [PATCH v11 10/13] qapi: Add transaction support to block-dirty-bitmap-{add, enable, disable} John Snow
2015-01-12 16:31 ` [Qemu-devel] [PATCH v11 11/13] qmp: Add dirty bitmap status fields in query-block John Snow
2015-01-12 16:31 ` [Qemu-devel] [PATCH v11 12/13] qemu-iotests: Add tests for drive-backup sync=dirty-bitmap John Snow
2015-02-06 14:23   ` Vladimir Sementsov-Ogievskiy
2015-02-06 17:14     ` John Snow
2015-01-12 16:31 ` [Qemu-devel] [PATCH v11 13/13] block: BdrvDirtyBitmap miscellaneous fixup John Snow
2015-01-13 16:50   ` Vladimir Sementsov-Ogievskiy
2015-01-13 18:27     ` John Snow
2015-01-13  1:21 ` [Qemu-devel] [PATCH v11 00/13] block: Incremental backup series Fam Zheng
2015-01-13 19:52 ` John Snow
2015-01-29 22:38 ` John Snow
2015-01-30 10:24 ` Vladimir Sementsov-Ogievskiy
2015-01-30 18:46   ` 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=54B945D4.2090603@redhat.com \
    --to=jsnow@redhat.com \
    --cc=armbru@redhat.com \
    --cc=famz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    --cc=vsementsov@parallels.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.