diff mbox series

[v3,6/7] migration/block-dirty-bitmap: add_bitmaps_to_list: check disk name once

Message ID 20200515124024.3491-7-vsementsov@virtuozzo.com (mailing list archive)
State New, archived
Headers show
Series fix migration with bitmaps and mirror | expand

Commit Message

Vladimir Sementsov-Ogievskiy May 15, 2020, 12:40 p.m. UTC
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>
---
 migration/block-dirty-bitmap.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

Comments

Eric Blake May 21, 2020, 9:09 p.m. UTC | #1
On 5/15/20 7:40 AM, Vladimir Sementsov-Ogievskiy wrote:
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> Reviewed-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>
> ---
>   migration/block-dirty-bitmap.c | 17 +++++++++++------
>   1 file changed, 11 insertions(+), 6 deletions(-)
> 
> diff --git a/migration/block-dirty-bitmap.c b/migration/block-dirty-bitmap.c
> index 5d3a7d2b07..e0e081ce60 100644
> --- a/migration/block-dirty-bitmap.c
> +++ b/migration/block-dirty-bitmap.c
> @@ -274,17 +274,22 @@ static int add_bitmaps_to_list(BlockDriverState *bs, const char *bs_name)
>       DirtyBitmapMigBitmapState *dbms;
>       Error *local_err = NULL;
>   
> +    bitmap = bdrv_dirty_bitmap_first(bs);
> +    if (!bitmap) {
> +        return 0;
> +    }
> +
> +    if (!bs_name || strcmp(bs_name, "") == 0) {
> +        error_report("Found bitmap '%s' in unnamed node %p. It can't "
> +                     "be migrated", bdrv_dirty_bitmap_name(bitmap), bs);

The %p is unusual; it does not help the end user, but only a developer 
with gdb access.

Maybe we could compress to:

"Bitmap '%s' in unnamed node can't be migrated"

> +        return -1;
> +    }
> +
>       FOR_EACH_DIRTY_BITMAP(bs, bitmap) {
>           if (!bdrv_dirty_bitmap_name(bitmap)) {
>               continue;
>           }
>   
> -        if (!bs_name || strcmp(bs_name, "") == 0) {
> -            error_report("Found bitmap '%s' in unnamed node %p. It can't "
> -                         "be migrated", bdrv_dirty_bitmap_name(bitmap), bs);
> -            return -1;
> -        }
> -

But since this is just code motion (hoisting an check outside of a loop, 
for fewer executions of something that does not change within the loop), 
it doesn't matter whether this patch goes in as-is or if you also tweak 
the error message.

Reviewed-by: Eric Blake <eblake@redhat.com>
diff mbox series

Patch

diff --git a/migration/block-dirty-bitmap.c b/migration/block-dirty-bitmap.c
index 5d3a7d2b07..e0e081ce60 100644
--- a/migration/block-dirty-bitmap.c
+++ b/migration/block-dirty-bitmap.c
@@ -274,17 +274,22 @@  static int add_bitmaps_to_list(BlockDriverState *bs, const char *bs_name)
     DirtyBitmapMigBitmapState *dbms;
     Error *local_err = NULL;
 
+    bitmap = bdrv_dirty_bitmap_first(bs);
+    if (!bitmap) {
+        return 0;
+    }
+
+    if (!bs_name || strcmp(bs_name, "") == 0) {
+        error_report("Found bitmap '%s' in unnamed node %p. It can't "
+                     "be migrated", bdrv_dirty_bitmap_name(bitmap), bs);
+        return -1;
+    }
+
     FOR_EACH_DIRTY_BITMAP(bs, bitmap) {
         if (!bdrv_dirty_bitmap_name(bitmap)) {
             continue;
         }
 
-        if (!bs_name || strcmp(bs_name, "") == 0) {
-            error_report("Found bitmap '%s' in unnamed node %p. It can't "
-                         "be migrated", bdrv_dirty_bitmap_name(bitmap), bs);
-            return -1;
-        }
-
         if (bdrv_dirty_bitmap_check(bitmap, BDRV_BITMAP_DEFAULT, &local_err)) {
             error_report_err(local_err);
             return -1;