Commit 5c5d2e50 authored by Vladimir Sementsov-Ogievskiy's avatar Vladimir Sementsov-Ogievskiy Committed by John Snow
Browse files

qapi: add x-block-dirty-bitmap-enable/disable



Expose the ability to turn bitmaps "on" or "off". This is experimental
and principally for the sake of the Libvirt Checkpoints API, and it may
or may not be committed for 3.0.

Signed-off-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Signed-off-by: default avatarJohn Snow <jsnow@redhat.com>
Reviewed-by: default avatarJeff Cody <jcody@redhat.com>
Message-id: 20180606182449.1607-3-jsnow@redhat.com
Signed-off-by: default avatarJohn Snow <jsnow@redhat.com>
parent 8b1402ce
Loading
Loading
Loading
Loading
+42 −0
Original line number Diff line number Diff line
@@ -2922,6 +2922,48 @@ void qmp_block_dirty_bitmap_clear(const char *node, const char *name,
    bdrv_clear_dirty_bitmap(bitmap, NULL);
}

void qmp_x_block_dirty_bitmap_enable(const char *node, const char *name,
                                   Error **errp)
{
    BlockDriverState *bs;
    BdrvDirtyBitmap *bitmap;

    bitmap = block_dirty_bitmap_lookup(node, name, &bs, errp);
    if (!bitmap) {
        return;
    }

    if (bdrv_dirty_bitmap_frozen(bitmap)) {
        error_setg(errp,
                   "Bitmap '%s' is currently frozen and cannot be enabled",
                   name);
        return;
    }

    bdrv_enable_dirty_bitmap(bitmap);
}

void qmp_x_block_dirty_bitmap_disable(const char *node, const char *name,
                                    Error **errp)
{
    BlockDriverState *bs;
    BdrvDirtyBitmap *bitmap;

    bitmap = block_dirty_bitmap_lookup(node, name, &bs, errp);
    if (!bitmap) {
        return;
    }

    if (bdrv_dirty_bitmap_frozen(bitmap)) {
        error_setg(errp,
                   "Bitmap '%s' is currently frozen and cannot be disabled",
                   name);
        return;
    }

    bdrv_disable_dirty_bitmap(bitmap);
}

BlockDirtyBitmapSha256 *qmp_x_debug_block_dirty_bitmap_sha256(const char *node,
                                                              const char *name,
                                                              Error **errp)
+42 −0
Original line number Diff line number Diff line
@@ -1808,6 +1808,48 @@
{ 'command': 'block-dirty-bitmap-clear',
  'data': 'BlockDirtyBitmap' }

##
# @x-block-dirty-bitmap-enable:
#
# Enables a dirty bitmap so that it will begin tracking disk changes.
#
# Returns: nothing on success
#          If @node is not a valid block device, DeviceNotFound
#          If @name is not found, GenericError with an explanation
#
# Since: 3.0
#
# Example:
#
# -> { "execute": "x-block-dirty-bitmap-enable",
#      "arguments": { "node": "drive0", "name": "bitmap0" } }
# <- { "return": {} }
#
##
  { 'command': 'x-block-dirty-bitmap-enable',
    'data': 'BlockDirtyBitmap' }

##
# @x-block-dirty-bitmap-disable:
#
# Disables a dirty bitmap so that it will stop tracking disk changes.
#
# Returns: nothing on success
#          If @node is not a valid block device, DeviceNotFound
#          If @name is not found, GenericError with an explanation
#
# Since: 3.0
#
# Example:
#
# -> { "execute": "x-block-dirty-bitmap-disable",
#      "arguments": { "node": "drive0", "name": "bitmap0" } }
# <- { "return": {} }
#
##
    { 'command': 'x-block-dirty-bitmap-disable',
      'data': 'BlockDirtyBitmap' }

##
# @BlockDirtyBitmapSha256:
#