Files
qemu/migration/file.c
Nikolay Borisov 7608096206 migration: Add support for 'file:' uri for incoming migration
This is a counterpart to the 'file:' uri support for source migration,
now a file can also serve as the source of an incoming migration.

Unlike other migration protocol backends, the 'file' protocol cannot
honour non-blocking mode. POSIX file/block storage will always report
ready to read/write, regardless of how slow the underlying storage
will be at servicing the request.

For incoming migration this limitation may result in the main event
loop not being fully responsive while loading the VM state. This
won't impact the VM since it is not running at this phase, however,
it may impact management applications.

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: Fabiano Rosas <farosas@suse.de>
2023-05-08 11:21:55 -03:00

37 lines
994 B
C

#include "qemu/osdep.h"
#include "channel.h"
#include "io/channel-file.h"
#include "file.h"
#include "qemu/error-report.h"
void file_start_outgoing_migration(MigrationState *s, const char *fname, Error **errp)
{
QIOChannelFile *ioc;
ioc = qio_channel_file_new_path(fname, O_CREAT | O_TRUNC | O_WRONLY, 0660, errp);
if (!ioc) {
error_report("Error creating a channel");
return;
}
qio_channel_set_name(QIO_CHANNEL(ioc), "migration-file-outgoing");
migration_channel_connect(s, QIO_CHANNEL(ioc), NULL, NULL);
object_unref(OBJECT(ioc));
}
void file_start_incoming_migration(const char *fname, Error **errp)
{
QIOChannelFile *ioc;
ioc = qio_channel_file_new_path(fname, O_RDONLY, 0, errp);
if (!ioc) {
error_report("Error creating a channel");
return;
}
qio_channel_set_name(QIO_CHANNEL(ioc), "migration-file-incoming");
migration_channel_process_incoming(QIO_CHANNEL(ioc));
object_unref(OBJECT(ioc));
}