[Qemu-devel] [PATCH v2 04/10] qcow2/bitmap: cache loaded bitmaps

John Snow posted 10 patches 7 years, 8 months ago
[Qemu-devel] [PATCH v2 04/10] qcow2/bitmap: cache loaded bitmaps
Posted by John Snow 7 years, 8 months ago
For bitmaps that we succeeded in loading, we can cache a reference
to that object. This will let us iterate over the more convenient
form of in-memory bitmaps for qemu-img bitmap manipulation tools.

Signed-off-by: John Snow <jsnow@redhat.com>
---
 block/qcow2-bitmap.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c
index 5ae9b17928..d94b6bd5cf 100644
--- a/block/qcow2-bitmap.c
+++ b/block/qcow2-bitmap.c
@@ -981,6 +981,7 @@ bool qcow2_load_dirty_bitmaps(BlockDriverState *bs, Error **errp)
             if (bitmap == NULL) {
                 goto fail;
             }
+            bm->dirty_bitmap = bitmap;
 
             if (!(bm->flags & BME_FLAG_AUTO)) {
                 bdrv_disable_dirty_bitmap(bitmap);
@@ -1382,6 +1383,7 @@ void qcow2_store_persistent_dirty_bitmaps(BlockDriverState *bs, Error **errp)
             bm->name = g_strdup(name);
             QSIMPLEQ_INSERT_TAIL(bm_list, bm, entry);
         } else {
+            assert(bitmap == bm->dirty_bitmap);
             if (!(bm->flags & BME_FLAG_IN_USE)) {
                 error_setg(errp, "Bitmap '%s' already exists in the image",
                            name);
-- 
2.14.3


Re: [Qemu-devel] [PATCH v2 04/10] qcow2/bitmap: cache loaded bitmaps
Posted by Vladimir Sementsov-Ogievskiy 7 years, 7 months ago
13.06.2018 05:06, John Snow wrote:
> For bitmaps that we succeeded in loading, we can cache a reference
> to that object. This will let us iterate over the more convenient
> form of in-memory bitmaps for qemu-img bitmap manipulation tools.
>
> Signed-off-by: John Snow <jsnow@redhat.com>
> ---
>   block/qcow2-bitmap.c | 2 ++
>   1 file changed, 2 insertions(+)
>
> diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c
> index 5ae9b17928..d94b6bd5cf 100644
> --- a/block/qcow2-bitmap.c
> +++ b/block/qcow2-bitmap.c
> @@ -981,6 +981,7 @@ bool qcow2_load_dirty_bitmaps(BlockDriverState *bs, Error **errp)
>               if (bitmap == NULL) {
>                   goto fail;
>               }
> +            bm->dirty_bitmap = bitmap;
>   
>               if (!(bm->flags & BME_FLAG_AUTO)) {
>                   bdrv_disable_dirty_bitmap(bitmap);
> @@ -1382,6 +1383,7 @@ void qcow2_store_persistent_dirty_bitmaps(BlockDriverState *bs, Error **errp)
>               bm->name = g_strdup(name);
>               QSIMPLEQ_INSERT_TAIL(bm_list, bm, entry);
>           } else {
> +            assert(bitmap == bm->dirty_bitmap);
>               if (!(bm->flags & BME_FLAG_IN_USE)) {
>                   error_setg(errp, "Bitmap '%s' already exists in the image",
>                              name);

and now it is already used in 02, so it should be reordered or merged to it

-- 
Best regards,
Vladimir