From: Peter Xu Date: Thu, 15 Jan 2026 22:55:03 +0000 (-0500) Subject: migration: Remove fd: support on files X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f1fcc1c10197dbf6e2059797ad2dd1004cca9beb;p=thirdparty%2Fqemu.git migration: Remove fd: support on files This feature was deprecated in 9.1. Remove it in this release (11.0). We also need to remove one unit test (/migration/precopy/fd/file) that covers the fd: file migration, because it'll stop working now. Reviewed-by: Prasad Pandit Reviewed-by: Fabiano Rosas Signed-off-by: Peter Xu Link: https://lore.kernel.org/qemu-devel/20260115225503.3083355-3-peterx@redhat.com Signed-off-by: Fabiano Rosas --- diff --git a/docs/about/deprecated.rst b/docs/about/deprecated.rst index ae9a3b8aea..1d5c4f3707 100644 --- a/docs/about/deprecated.rst +++ b/docs/about/deprecated.rst @@ -518,17 +518,3 @@ If the user requests a modern x86 CPU model (i.e. not one of ``486``, ``athlon``, ``kvm32``, ``pentium``, ``pentium2``, ``pentium3``or ``qemu32``) a warning will be displayed until a future QEMU version when such CPUs will be rejected. - -Migration ---------- - -``fd:`` URI when used for file migration (since 9.1) -'''''''''''''''''''''''''''''''''''''''''''''''''''' - -The ``fd:`` URI can currently provide a file descriptor that -references either a socket or a plain file. These are two different -types of migration. In order to reduce ambiguity, the ``fd:`` URI -usage of providing a file descriptor to a plain file has been -deprecated in favor of explicitly using the ``file:`` URI with the -file descriptor being passed as an ``fdset``. Refer to the ``add-fd`` -command documentation for details on the ``fdset`` usage. diff --git a/docs/about/removed-features.rst b/docs/about/removed-features.rst index 92f80a32e4..41bec8b8e3 100644 --- a/docs/about/removed-features.rst +++ b/docs/about/removed-features.rst @@ -716,6 +716,15 @@ Use blockdev-mirror with NBD instead. See "QMP invocation for live storage migration with ``blockdev-mirror`` + NBD" in docs/interop/live-block-operations.rst for a detailed explanation. +``migrate`` command with file-based ``fd:`` URI (removed in 11.0) +''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + +In order to reduce ambiguity, the ``fd:`` URI usage of providing a +file descriptor to a plain file has been removed in favor of +explicitly using the ``file:`` URI with the file descriptor being +passed as an ``fdset``. Refer to the ``add-fd`` command documentation +for details on the ``fdset`` usage. + ``migrate-set-capabilities`` ``block`` option (removed in 9.1) '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' diff --git a/migration/fd.c b/migration/fd.c index 9bf9be6acb..fdeece2101 100644 --- a/migration/fd.c +++ b/migration/fd.c @@ -24,6 +24,7 @@ #include "qemu/sockets.h" #include "io/channel-util.h" #include "trace.h" +#include "qapi/error.h" static bool fd_is_pipe(int fd) { @@ -58,8 +59,9 @@ void fd_start_outgoing_migration(MigrationState *s, const char *fdname, Error ** } if (!migration_fd_valid(fd)) { - warn_report("fd: migration to a file is deprecated." - " Use file: instead."); + error_setg(errp, "fd: migration to a file is not supported." + " Use file: instead."); + return; } trace_migration_fd_outgoing(fd); @@ -92,8 +94,9 @@ void fd_start_incoming_migration(const char *fdname, Error **errp) } if (!migration_fd_valid(fd)) { - warn_report("fd: migration to a file is deprecated." - " Use file: instead."); + error_setg(errp, "fd: migration to a file is not supported." + " Use file: instead."); + return; } trace_migration_fd_incoming(fd); diff --git a/tests/qtest/migration/precopy-tests.c b/tests/qtest/migration/precopy-tests.c index 0283da43e3..a5423ca33c 100644 --- a/tests/qtest/migration/precopy-tests.c +++ b/tests/qtest/migration/precopy-tests.c @@ -289,45 +289,6 @@ static void test_precopy_fd_socket(char *name, MigrateCommon *args) test_precopy_common(args); } - -static void *migrate_hook_start_precopy_fd_file(QTestState *from, - QTestState *to) -{ - g_autofree char *file = g_strdup_printf("%s/%s", tmpfs, FILE_TEST_FILENAME); - int src_flags = O_CREAT | O_RDWR; - int dst_flags = O_CREAT | O_RDWR; - int fds[2]; - - fds[0] = open(file, src_flags, 0660); - assert(fds[0] != -1); - - fds[1] = open(file, dst_flags, 0660); - assert(fds[1] != -1); - - - qtest_qmp_fds_assert_success(to, &fds[0], 1, - "{ 'execute': 'getfd'," - " 'arguments': { 'fdname': 'fd-mig' }}"); - - qtest_qmp_fds_assert_success(from, &fds[1], 1, - "{ 'execute': 'getfd'," - " 'arguments': { 'fdname': 'fd-mig' }}"); - - close(fds[0]); - close(fds[1]); - - return NULL; -} - -static void test_precopy_fd_file(char *name, MigrateCommon *args) -{ - args->listen_uri = "defer"; - args->connect_uri = "fd:fd-mig"; - args->start_hook = migrate_hook_start_precopy_fd_file; - args->end_hook = migrate_hook_end_fd; - - test_file_common(args, true); -} #endif /* _WIN32 */ /* @@ -1255,8 +1216,6 @@ void migration_test_add_precopy(MigrationTestEnv *env) #ifndef _WIN32 migration_test_add("/migration/precopy/fd/tcp", test_precopy_fd_socket); - migration_test_add("/migration/precopy/fd/file", - test_precopy_fd_file); #endif /*