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