qemu/migration
Fabiano Rosas 0bd5b9284f migration/multifd: Fix multifd_send_setup cleanup when channel creation fails
When a channel fails to create, the code currently just returns. This
is wrong for two reasons:

1) Channel n+1 will not get to initialize it's semaphores, leading to
   an assert when terminate_threads tries to post to it:

 qemu-system-x86_64: ../util/qemu-thread-posix.c:92:
 qemu_mutex_lock_impl: Assertion `mutex->initialized' failed.

2) (theoretical) If channel n-1 already started creation it will
   defeat the purpose of the channels_created logic which is in place
   to avoid migrate_fd_cleanup() to run while channels are still being
   created.

   This cannot really happen today because the current failure cases
   for multifd_new_send_channel_create() are all synchronous,
   resulting from qio_channel_file_new_path() getting a bad
   filename. This would hit all channels equally.

   But I don't want to set a trap for future people, so have all
   channels try to create (even if failing), and only fail after the
   channels_created semaphore has been posted.

While here, remove the error_report_err call. There's one already at
migrate_fd_cleanup later on.

Cc: qemu-stable@nongnu.org
Reported-by: Jim Fehlig <jfehlig@suse.com>
Fixes: b7b03eb614 ("migration/multifd: Add outgoing QIOChannelFile support")
Reviewed-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Fabiano Rosas <farosas@suse.de>
2024-08-02 09:47:40 -03:00
..
block-dirty-bitmap.c
channel-block.c
channel-block.h
channel.c
channel.h
colo-failover.c
colo-stubs.c migration/colo: make colo_incoming_co() return void 2024-05-22 17:34:31 -03:00
colo.c migration: Rename thread debug names 2024-06-21 09:47:59 -03:00
dirtyrate.c migration: remove unnecessary zlib dependency 2024-05-25 13:28:02 +02:00
dirtyrate.h
exec.c
exec.h
fd.c migration: Deprecate fd: for file migration 2024-05-08 09:20:59 -03:00
fd.h
file.c migration: Fix cleanup of iochannel in file migration 2024-08-02 09:47:40 -03:00
file.h migration/multifd: Add direct-io support 2024-06-21 09:47:22 -03:00
global_state.c
meson.build migration/multifd: add uadk compression framework 2024-06-14 14:01:29 -03:00
migration-hmp-cmds.c migration: Add direct-io parameter 2024-06-21 09:47:22 -03:00
migration-stats.c
migration-stats.h
migration.c migration/postcopy: Add postcopy-recover-setup phase 2024-06-21 09:47:59 -03:00
migration.h migration: Use MigrationStatus instead of int 2024-06-21 09:47:59 -03:00
multifd-qpl.c migration/multifd: implement qpl compression and decompression 2024-06-14 14:01:29 -03:00
multifd-uadk.c migration/multifd: Switch to no compression when no hardware support 2024-06-14 14:01:30 -03:00
multifd-zero-page.c
multifd-zlib.c migration/multifd: put IOV initialization into compression method 2024-06-14 14:01:28 -03:00
multifd-zstd.c migration/multifd: put IOV initialization into compression method 2024-06-14 14:01:28 -03:00
multifd.c migration/multifd: Fix multifd_send_setup cleanup when channel creation fails 2024-08-02 09:47:40 -03:00
multifd.h migration/multifd: add uadk compression framework 2024-06-14 14:01:29 -03:00
options.c migration: Add direct-io parameter 2024-06-21 09:47:22 -03:00
options.h migration: Add direct-io parameter 2024-06-21 09:47:22 -03:00
page_cache.c
page_cache.h
postcopy-ram.c migration/postcopy: Add postcopy-recover-setup phase 2024-06-21 09:47:59 -03:00
postcopy-ram.h migration/postcopy: Add postcopy-recover-setup phase 2024-06-21 09:47:59 -03:00
qemu-file.c migration: remove unnecessary zlib dependency 2024-05-25 13:28:02 +02:00
qemu-file.h migration: Remove non-multifd compression 2024-05-08 09:20:59 -03:00
ram.c migration/multifd: Avoid the final FLUSH in complete() 2024-06-21 09:47:59 -03:00
ram.h
rdma.c
rdma.h
savevm.c migration: Free removed SaveStateEntry 2024-08-02 09:47:39 -03:00
savevm.h
socket.c
socket.h
target.c
threadinfo.c
threadinfo.h
tls.c
tls.h
trace-events migration: add "exists" info to load-state-field trace 2024-05-22 17:34:40 -03:00
trace.h
vmstate-types.c
vmstate.c migration: fix a typo 2024-05-22 17:34:40 -03:00
xbzrle.c
xbzrle.h
yank_functions.c
yank_functions.h