mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 09:13:55 -06:00
migration: use QEMUFile for migration channel lifetime
As a start, use QEMUFile to store the destination and close it. qemu_get_fd gets a file descriptor that will be used by the write callbacks. Reviewed-by: Orit Wasserman <owasserm@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
parent
3f2d38faab
commit
f8bbc12863
7 changed files with 21 additions and 89 deletions
|
@ -40,45 +40,16 @@ static int fd_write(MigrationState *s, const void * buf, size_t size)
|
|||
return write(s->fd, buf, size);
|
||||
}
|
||||
|
||||
static int fd_close(MigrationState *s)
|
||||
{
|
||||
struct stat st;
|
||||
int ret;
|
||||
|
||||
DPRINTF("fd_close\n");
|
||||
ret = fstat(s->fd, &st);
|
||||
if (ret == 0 && S_ISREG(st.st_mode)) {
|
||||
/*
|
||||
* If the file handle is a regular file make sure the
|
||||
* data is flushed to disk before signaling success.
|
||||
*/
|
||||
ret = fsync(s->fd);
|
||||
if (ret != 0) {
|
||||
ret = -errno;
|
||||
perror("migration-fd: fsync");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
ret = close(s->fd);
|
||||
s->fd = -1;
|
||||
if (ret != 0) {
|
||||
ret = -errno;
|
||||
perror("migration-fd: close");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void fd_start_outgoing_migration(MigrationState *s, const char *fdname, Error **errp)
|
||||
{
|
||||
s->fd = monitor_get_fd(cur_mon, fdname, errp);
|
||||
if (s->fd == -1) {
|
||||
int fd = monitor_get_fd(cur_mon, fdname, errp);
|
||||
if (fd == -1) {
|
||||
return;
|
||||
}
|
||||
s->migration_file = qemu_fdopen(fd, "wb");
|
||||
|
||||
s->get_error = fd_errno;
|
||||
s->write = fd_write;
|
||||
s->close = fd_close;
|
||||
|
||||
migrate_fd_connect(s);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue