The migration parameters validation involves producing a temporary structure which merges the current parameter values with the new parameters set by the user.
The has_ boolean fields of MigrateSetParameter are taken into consideration when writing the temporary structure, however the copy of the current parameters also copies all the has_ fields of s->parameters and those are (almost) all true due to being initialized by migrate_params_init(). Since the temporary structure copy does not carry over the has_ fields from MigrateSetParameters, only the values which were initialized in migrate_params_init() will end up being validated. This causes (almost) all of the migration parameters to be validated again every time a parameter is set, which could be considered a bug. But it also skips validation of those values which are not set in migrate_params_init(), which is a worse issue. Fix by initializing the missing values in migrate_params_init(). Currently 'avail_switchover_bandwidth' and 'block_bitmap_mapping' are affected. Signed-off-by: Fabiano Rosas <faro...@suse.de> --- migration/options.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/migration/options.c b/migration/options.c index cac28540dd..625d597a85 100644 --- a/migration/options.c +++ b/migration/options.c @@ -987,6 +987,8 @@ void migrate_params_init(MigrationParameters *params) params->has_mode = true; params->has_zero_page_detection = true; params->has_direct_io = true; + params->has_avail_switchover_bandwidth = true; + params->has_block_bitmap_mapping = true; } /* -- 2.35.3