The same thing as for incoming postcopy - we cannot deal with concurrent
RAM discards when using background snapshot feature in outgoing migration.
Signed-off-by: Andrey Gruzdev <andrey.gruzdev@virtuozzo.com>
---
hw/virtio/virtio-balloon.c | 8 ++++++--
include/migration/misc.h | 2 ++
migration/migration.c | 8 ++++++++
3 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
index e770955176..d120bf8f43 100644
--- a/hw/virtio/virtio-balloon.c
+++ b/hw/virtio/virtio-balloon.c
@@ -66,8 +66,12 @@ static bool virtio_balloon_pbp_matches(PartiallyBalloonedPage *pbp,
static bool virtio_balloon_inhibited(void)
{
- /* Postcopy cannot deal with concurrent discards, so it's special. */
- return ram_block_discard_is_disabled() || migration_in_incoming_postcopy();
+ /*
+ * Postcopy cannot deal with concurrent discards,
+ * so it's special, as well as background snapshots.
+ */
+ return ram_block_discard_is_disabled() || migration_in_incoming_postcopy() ||
+ migration_in_bg_snapshot();
}
static void balloon_inflate_page(VirtIOBalloon *balloon,
diff --git a/include/migration/misc.h b/include/migration/misc.h
index bccc1b6b44..738675ef52 100644
--- a/include/migration/misc.h
+++ b/include/migration/misc.h
@@ -70,6 +70,8 @@ bool migration_in_postcopy_after_devices(MigrationState *);
void migration_global_dump(Monitor *mon);
/* True if incomming migration entered POSTCOPY_INCOMING_DISCARD */
bool migration_in_incoming_postcopy(void);
+/* True if background snapshot is active */
+bool migration_in_bg_snapshot(void);
/* migration/block-dirty-bitmap.c */
void dirty_bitmap_mig_init(void);
diff --git a/migration/migration.c b/migration/migration.c
index 496cf6e17b..656d6249a6 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1976,6 +1976,14 @@ bool migration_in_incoming_postcopy(void)
return ps >= POSTCOPY_INCOMING_DISCARD && ps < POSTCOPY_INCOMING_END;
}
+bool migration_in_bg_snapshot(void)
+{
+ MigrationState *s = migrate_get_current();
+
+ return migrate_background_snapshot() &&
+ migration_is_setup_or_active(s->state);
+}
+
bool migration_is_idle(void)
{
MigrationState *s = current_migration;
--
2.25.1
On 18.03.21 18:46, Andrey Gruzdev wrote:
> The same thing as for incoming postcopy - we cannot deal with concurrent
> RAM discards when using background snapshot feature in outgoing migration.
>
> Signed-off-by: Andrey Gruzdev <andrey.gruzdev@virtuozzo.com>
> ---
> hw/virtio/virtio-balloon.c | 8 ++++++--
> include/migration/misc.h | 2 ++
> migration/migration.c | 8 ++++++++
> 3 files changed, 16 insertions(+), 2 deletions(-)
>
> diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
> index e770955176..d120bf8f43 100644
> --- a/hw/virtio/virtio-balloon.c
> +++ b/hw/virtio/virtio-balloon.c
> @@ -66,8 +66,12 @@ static bool virtio_balloon_pbp_matches(PartiallyBalloonedPage *pbp,
>
> static bool virtio_balloon_inhibited(void)
> {
> - /* Postcopy cannot deal with concurrent discards, so it's special. */
> - return ram_block_discard_is_disabled() || migration_in_incoming_postcopy();
> + /*
> + * Postcopy cannot deal with concurrent discards,
> + * so it's special, as well as background snapshots.
> + */
> + return ram_block_discard_is_disabled() || migration_in_incoming_postcopy() ||
> + migration_in_bg_snapshot();
> }
>
> static void balloon_inflate_page(VirtIOBalloon *balloon,
> diff --git a/include/migration/misc.h b/include/migration/misc.h
> index bccc1b6b44..738675ef52 100644
> --- a/include/migration/misc.h
> +++ b/include/migration/misc.h
> @@ -70,6 +70,8 @@ bool migration_in_postcopy_after_devices(MigrationState *);
> void migration_global_dump(Monitor *mon);
> /* True if incomming migration entered POSTCOPY_INCOMING_DISCARD */
> bool migration_in_incoming_postcopy(void);
> +/* True if background snapshot is active */
> +bool migration_in_bg_snapshot(void);
>
> /* migration/block-dirty-bitmap.c */
> void dirty_bitmap_mig_init(void);
> diff --git a/migration/migration.c b/migration/migration.c
> index 496cf6e17b..656d6249a6 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -1976,6 +1976,14 @@ bool migration_in_incoming_postcopy(void)
> return ps >= POSTCOPY_INCOMING_DISCARD && ps < POSTCOPY_INCOMING_END;
> }
>
> +bool migration_in_bg_snapshot(void)
> +{
> + MigrationState *s = migrate_get_current();
> +
> + return migrate_background_snapshot() &&
> + migration_is_setup_or_active(s->state);
> +}
> +
> bool migration_is_idle(void)
> {
> MigrationState *s = current_migration;
>
Reviewed-by: David Hildenbrand <david@redhat.com>
--
Thanks,
David / dhildenb
On 18.03.2021 21:16, David Hildenbrand wrote:
> On 18.03.21 18:46, Andrey Gruzdev wrote:
>> The same thing as for incoming postcopy - we cannot deal with concurrent
>> RAM discards when using background snapshot feature in outgoing
>> migration.
>>
>> Signed-off-by: Andrey Gruzdev <andrey.gruzdev@virtuozzo.com>
>> ---
>> hw/virtio/virtio-balloon.c | 8 ++++++--
>> include/migration/misc.h | 2 ++
>> migration/migration.c | 8 ++++++++
>> 3 files changed, 16 insertions(+), 2 deletions(-)
>>
>> diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
>> index e770955176..d120bf8f43 100644
>> --- a/hw/virtio/virtio-balloon.c
>> +++ b/hw/virtio/virtio-balloon.c
>> @@ -66,8 +66,12 @@ static bool
>> virtio_balloon_pbp_matches(PartiallyBalloonedPage *pbp,
>> static bool virtio_balloon_inhibited(void)
>> {
>> - /* Postcopy cannot deal with concurrent discards, so it's
>> special. */
>> - return ram_block_discard_is_disabled() ||
>> migration_in_incoming_postcopy();
>> + /*
>> + * Postcopy cannot deal with concurrent discards,
>> + * so it's special, as well as background snapshots.
>> + */
>> + return ram_block_discard_is_disabled() ||
>> migration_in_incoming_postcopy() ||
>> + migration_in_bg_snapshot();
>> }
>> static void balloon_inflate_page(VirtIOBalloon *balloon,
>> diff --git a/include/migration/misc.h b/include/migration/misc.h
>> index bccc1b6b44..738675ef52 100644
>> --- a/include/migration/misc.h
>> +++ b/include/migration/misc.h
>> @@ -70,6 +70,8 @@ bool
>> migration_in_postcopy_after_devices(MigrationState *);
>> void migration_global_dump(Monitor *mon);
>> /* True if incomming migration entered POSTCOPY_INCOMING_DISCARD */
>> bool migration_in_incoming_postcopy(void);
>> +/* True if background snapshot is active */
>> +bool migration_in_bg_snapshot(void);
>> /* migration/block-dirty-bitmap.c */
>> void dirty_bitmap_mig_init(void);
>> diff --git a/migration/migration.c b/migration/migration.c
>> index 496cf6e17b..656d6249a6 100644
>> --- a/migration/migration.c
>> +++ b/migration/migration.c
>> @@ -1976,6 +1976,14 @@ bool migration_in_incoming_postcopy(void)
>> return ps >= POSTCOPY_INCOMING_DISCARD && ps <
>> POSTCOPY_INCOMING_END;
>> }
>> +bool migration_in_bg_snapshot(void)
>> +{
>> + MigrationState *s = migrate_get_current();
>> +
>> + return migrate_background_snapshot() &&
>> + migration_is_setup_or_active(s->state);
>> +}
>> +
>> bool migration_is_idle(void)
>> {
>> MigrationState *s = current_migration;
>>
>
> Reviewed-by: David Hildenbrand <david@redhat.com>
>
Thanks!
--
Andrey Gruzdev, Principal Engineer
Virtuozzo GmbH +7-903-247-6397
virtuzzo.com
© 2016 - 2026 Red Hat, Inc.