yank: Unregister function when using TLS migration
commit7de2e8565335c13fb3516cddbe2e40e366cce273
authorLeonardo Bras <leobras.c@gmail.com>
Tue, 1 Jun 2021 05:40:31 +0000 (1 02:40 -0300)
committerDr. David Alan Gilbert <dgilbert@redhat.com>
Tue, 8 Jun 2021 17:50:03 +0000 (8 18:50 +0100)
tree9af7b15e29056f9f98a2f84e27f6ba0ef2e87b8f
parenta4716fd8d7c877185652f5f8e25032dc7699d51b
yank: Unregister function when using TLS migration

After yank feature was introduced in migration, whenever migration
is started using TLS, the following error happens in both source and
destination hosts:

(qemu) qemu-kvm: ../util/yank.c:107: yank_unregister_instance:
Assertion `QLIST_EMPTY(&entry->yankfns)' failed.

This happens because of a missing yank_unregister_function() when using
qio-channel-tls.

Fix this by also allowing TYPE_QIO_CHANNEL_TLS object type to perform
yank_unregister_function() in channel_close() and multifd_load_cleanup().

Also, inside migration_channel_connect() and
migration_channel_process_incoming() move yank_register_function() so
it only runs once on a TLS migration.

Fixes: b5eea99ec2f ("migration: Add yank feature", 2021-01-13)
Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1964326
Signed-off-by: Leonardo Bras <leobras.c@gmail.com>
Reviewed-by: Lukas Straub <lukasstraub2@web.de>
Reviewed-by: Peter Xu <peterx@redhat.com>
--
Changes since v2:
- Dropped all references to ioc->master
- yank_register_function() and yank_unregister_function() now only run
  once in a TLS migration.

Changes since v1:
- Cast p->c to QIOChannelTLS into multifd_load_cleanup()
Message-Id: <20210601054030.1153249-1-leobras.c@gmail.com>

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
migration/channel.c
migration/multifd.c
migration/qemu-file-channel.c