From dd277015d70cd5521398d298dbc236b9aeb296f5 Mon Sep 17 00:00:00 2001 From: John Snow Date: Tue, 20 Nov 2018 18:18:11 +0000 Subject: [PATCH 17/35] dirty-bitmap: switch assert-fails to errors in bdrv_merge_dirty_bitmap RH-Author: John Snow Message-id: <20181120181828.15132-8-jsnow@redhat.com> Patchwork-id: 83055 O-Subject: [RHEL8/rhel qemu-kvm PATCH 07/24] dirty-bitmap: switch assert-fails to errors in bdrv_merge_dirty_bitmap Bugzilla: 1518989 RH-Acked-by: Laurent Vivier RH-Acked-by: Max Reitz RH-Acked-by: Stefan Hajnoczi From: Vladimir Sementsov-Ogievskiy 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: Vladimir Sementsov-Ogievskiy Reviewed-by: John Snow (cherry picked from commit 06bf50068a7e952afff8c4f6470ec54a712570f7) Signed-off-by: John Snow Signed-off-by: Danilo C. L. de Paula --- block/dirty-bitmap.c | 15 +++++++++++++-- blockdev.c | 10 ---------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c index c9b8a6f..6c8761e 100644 --- a/block/dirty-bitmap.c +++ b/block/dirty-bitmap.c @@ -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); } diff --git a/blockdev.c b/blockdev.c index a722188..b3d265b 100644 --- a/blockdev.c +++ b/blockdev.c @@ -3071,16 +3071,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); -- 1.8.3.1