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 migration: Add Error** argument to add_bitmaps_to_list() 2024-04-23 18:36:01 -04:00
channel-block.c
channel-block.h
channel.c migration: Fix migration_channel_read_peek() error path 2024-01-04 09:52:42 +08:00
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 migration/calc-dirty-rate: millisecond-granularity period 2023-10-10 08:03:50 +08:00
exec.c migration: simplify exec migration functions 2024-03-04 07:12:40 +01:00
exec.h migration: convert exec backend to accept MigrateAddress. 2023-11-02 11:35:04 +01:00
fd.c migration: Deprecate fd: for file migration 2024-05-08 09:20:59 -03:00
fd.h migration: Revert mapped-ram multifd support to fd: URI 2024-03-22 12:12:08 -04:00
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 migration 1st pull for 9.0 2024-01-05 13:35:25 +00:00
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: migration_rate_limit_reset() don't need the QEMUFile 2023-10-31 08:44:33 +01:00
migration-stats.h migration: Remove transferred atomic counter 2023-10-31 08:44:33 +01:00
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 migration/multifd: solve zero page causing multiple page faults 2024-04-23 18:36:01 -04:00
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 migration/multifd: solve zero page causing multiple page faults 2024-04-23 18:36:01 -04:00
rdma.c migration/rdma: Fix a memory issue for migration 2024-03-11 14:41:40 -04:00
rdma.h migration: convert rdma backend to accept MigrateAddress 2023-11-02 11:35:03 +01:00
savevm.c migration: Free removed SaveStateEntry 2024-08-02 09:47:39 -03:00
savevm.h migration: Add Error** argument to qemu_savevm_state_setup() 2024-04-23 18:36:01 -04:00
socket.c migration/multifd: Drop unnecessary helper to destroy IOC 2024-02-28 11:31:28 +08:00
socket.h migration/multifd: Drop unnecessary helper to destroy IOC 2024-02-28 11:31:28 +08:00
target.c migration: Add migration prefix to functions in target.c 2023-09-11 08:34:06 +02:00
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 migration/yank: Use channel features 2024-01-29 11:02:12 +08:00
yank_functions.h