Commit 06bf5006 authored by Vladimir Sementsov-Ogievskiy's avatar Vladimir Sementsov-Ogievskiy Committed by John Snow
Browse files

dirty-bitmap: switch assert-fails to errors in bdrv_merge_dirty_bitmap



Move checks from qmp_x_block_dirty_bitmap_merge() to
bdrv_merge_dirty_bitmap(), to share them with dirty bitmap merge
transaction action in future commit.

Note: for now, only qmp_x_block_dirty_bitmap_merge() calls
bdrv_merge_dirty_bitmap().

Signed-off-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: default avatarJohn Snow <jsnow@redhat.com>
parent 945c1ee0
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -798,12 +798,23 @@ void bdrv_merge_dirty_bitmap(BdrvDirtyBitmap *dest, const BdrvDirtyBitmap *src,

    qemu_mutex_lock(dest->mutex);

    assert(bdrv_dirty_bitmap_enabled(dest));
    assert(!bdrv_dirty_bitmap_readonly(dest));
    if (bdrv_dirty_bitmap_frozen(dest)) {
        error_setg(errp, "Bitmap '%s' is frozen and cannot be modified",
                   dest->name);
        goto out;
    }

    if (bdrv_dirty_bitmap_readonly(dest)) {
        error_setg(errp, "Bitmap '%s' is readonly and cannot be modified",
                   dest->name);
        goto out;
    }

    if (!hbitmap_merge(dest->bitmap, src->bitmap)) {
        error_setg(errp, "Bitmaps are incompatible and can't be merged");
        goto out;
    }

out:
    qemu_mutex_unlock(dest->mutex);
}
+0 −10
Original line number Diff line number Diff line
@@ -2962,16 +2962,6 @@ void qmp_x_block_dirty_bitmap_merge(const char *node, const char *dst_name,
        return;
    }

    if (bdrv_dirty_bitmap_frozen(dst)) {
        error_setg(errp, "Bitmap '%s' is frozen and cannot be modified",
                   dst_name);
        return;
    } else if (bdrv_dirty_bitmap_readonly(dst)) {
        error_setg(errp, "Bitmap '%s' is readonly and cannot be modified",
                   dst_name);
        return;
    }

    src = bdrv_find_dirty_bitmap(bs, src_name);
    if (!src) {
        error_setg(errp, "Dirty bitmap '%s' not found", src_name);