[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 02/28] migration: Fix file migration with fdset
From: |
Fabiano Rosas |
Subject: |
[PULL 02/28] migration: Fix file migration with fdset |
Date: |
Fri, 21 Jun 2024 14:54:08 -0300 |
When the "file:" migration support was added we missed the special
case in the qemu_open_old implementation that allows for a particular
file name format to be used to refer to a set of file descriptors that
have been previously provided to QEMU via the add-fd QMP command.
When using this fdset feature, we should not truncate the migration
file because being given an fd means that the management layer is in
control of the file and will likely already have some data written to
it. This is further indicated by the presence of the 'offset'
argument, which indicates the start of the region where QEMU is
allowed to write.
Fix the issue by replacing the O_TRUNC flag on open by an ftruncate
call, which will take the offset into consideration.
Fixes: 385f510df5 ("migration: file URI offset")
Suggested-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Prasad Pandit <pjp@fedoraproject.org>
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Fabiano Rosas <farosas@suse.de>
---
migration/file.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/migration/file.c b/migration/file.c
index 2bb8c64092..a903710f06 100644
--- a/migration/file.c
+++ b/migration/file.c
@@ -84,12 +84,19 @@ void file_start_outgoing_migration(MigrationState *s,
trace_migration_file_outgoing(filename);
- fioc = qio_channel_file_new_path(filename, O_CREAT | O_WRONLY | O_TRUNC,
- 0600, errp);
+ fioc = qio_channel_file_new_path(filename, O_CREAT | O_WRONLY, 0600, errp);
if (!fioc) {
return;
}
+ if (ftruncate(fioc->fd, offset)) {
+ error_setg_errno(errp, errno,
+ "failed to truncate migration file to offset %"
PRIx64,
+ offset);
+ object_unref(OBJECT(fioc));
+ return;
+ }
+
outgoing_args.fname = g_strdup(filename);
ioc = QIO_CHANNEL(fioc);
--
2.35.3
- [PULL 00/28] Migration patches for 2024-06-21, Fabiano Rosas, 2024/06/21
- [PULL 01/28] migration: Drop reference to QIOChannel if file seeking fails, Fabiano Rosas, 2024/06/21
- [PULL 02/28] migration: Fix file migration with fdset,
Fabiano Rosas <=
- [PULL 03/28] tests/qtest/migration: Fix file migration offset check, Fabiano Rosas, 2024/06/21
- [PULL 05/28] monitor: Drop monitor_fdset_dup_fd_find/_remove(), Fabiano Rosas, 2024/06/21
- [PULL 04/28] tests/qtest/migration: Add a precopy file test with fdset, Fabiano Rosas, 2024/06/21
- [PULL 06/28] monitor: Introduce monitor_fdset_*free, Fabiano Rosas, 2024/06/21
- [PULL 07/28] monitor: Stop removing non-duplicated fds, Fabiano Rosas, 2024/06/21
- [PULL 08/28] monitor: Simplify fdset and fd removal, Fabiano Rosas, 2024/06/21
- [PULL 09/28] monitor: Report errors from monitor_fdset_dup_fd_add, Fabiano Rosas, 2024/06/21
- [PULL 10/28] io: Stop using qemu_open_old in channel-file, Fabiano Rosas, 2024/06/21
- [PULL 11/28] migration: Add direct-io parameter, Fabiano Rosas, 2024/06/21
- [PULL 12/28] migration/multifd: Add direct-io support, Fabiano Rosas, 2024/06/21