Leonardo Bras <leob...@redhat.com> wrote: > Currently running migration_incoming_state_destroy() without first running > multifd_load_cleanup() will cause a yank error: > > qemu-system-x86_64: ../util/yank.c:107: yank_unregister_instance: > Assertion `QLIST_EMPTY(&entry->yankfns)' failed. > (core dumped) > > The above error happens in the target host, when multifd is being used > for precopy, and then postcopy is triggered and the migration finishes. > This will crash the VM in the target host. > > To avoid that, move multifd_load_cleanup() inside > migration_incoming_state_destroy(), so that the load cleanup becomes part > of the incoming state destroying process. > > Running multifd_load_cleanup() twice can become an issue, though, but the > only scenario it could be ran twice is on process_incoming_migration_bh(). > So removing this extra call is necessary. > > On the other hand, this multifd_load_cleanup() call happens way before the > migration_incoming_state_destroy() and having this happening before > dirty_bitmap_mig_before_vm_start() and vm_start() may be a need. > > So introduce a new function multifd_load_shutdown() that will mainly stop > all multifd threads and close their QIOChannels. Then use this function > instead of multifd_load_cleanup() to make sure nothing else is received > before dirty_bitmap_mig_before_vm_start(). > > Signed-off-by: Leonardo Bras <leob...@redhat.com>
Reviewed-by: Juan Quintela <quint...@redhat.com>