migration: make writes blocking
Move all the writes to the migration_thread, and make writings blocking. Notice that are still using the iothread for everything that we do. Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
		
							parent
							
								
									766bd1769e
								
							
						
					
					
						commit
						dd217b8732
					
				| 
						 | 
				
			
			@ -113,11 +113,6 @@ int64_t qemu_file_set_rate_limit(QEMUFile *f, int64_t new_rate);
 | 
			
		|||
int64_t qemu_file_get_rate_limit(QEMUFile *f);
 | 
			
		||||
int qemu_file_get_error(QEMUFile *f);
 | 
			
		||||
 | 
			
		||||
/* Try to send any outstanding data.  This function is useful when output is
 | 
			
		||||
 * halted due to rate limiting or EAGAIN errors occur as it can be used to
 | 
			
		||||
 * resume output. */
 | 
			
		||||
int qemu_file_put_notify(QEMUFile *f);
 | 
			
		||||
 | 
			
		||||
static inline void qemu_put_be64s(QEMUFile *f, const uint64_t *pv)
 | 
			
		||||
{
 | 
			
		||||
    qemu_put_be64(f, *pv);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -69,7 +69,6 @@ void exec_start_outgoing_migration(MigrationState *s, const char *command, Error
 | 
			
		|||
 | 
			
		||||
    s->fd = fileno(f);
 | 
			
		||||
    assert(s->fd != -1);
 | 
			
		||||
    socket_set_nonblock(s->fd);
 | 
			
		||||
 | 
			
		||||
    s->opaque = qemu_popen(f, "w");
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -75,7 +75,6 @@ void fd_start_outgoing_migration(MigrationState *s, const char *fdname, Error **
 | 
			
		|||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fcntl(s->fd, F_SETFL, O_NONBLOCK);
 | 
			
		||||
    s->get_error = fd_errno;
 | 
			
		||||
    s->write = fd_write;
 | 
			
		||||
    s->close = fd_close;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,6 +60,7 @@ static void tcp_wait_for_connect(int fd, void *opaque)
 | 
			
		|||
    } else {
 | 
			
		||||
        DPRINTF("migrate connect success\n");
 | 
			
		||||
        s->fd = fd;
 | 
			
		||||
        socket_set_block(s->fd);
 | 
			
		||||
        migrate_fd_connect(s);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,6 +60,7 @@ static void unix_wait_for_connect(int fd, void *opaque)
 | 
			
		|||
    } else {
 | 
			
		||||
        DPRINTF("migrate connect success\n");
 | 
			
		||||
        s->fd = fd;
 | 
			
		||||
        socket_set_block(s->fd);
 | 
			
		||||
        migrate_fd_connect(s);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										17
									
								
								migration.c
								
								
								
								
							
							
						
						
									
										17
									
								
								migration.c
								
								
								
								
							| 
						 | 
				
			
			@ -297,18 +297,6 @@ static void migrate_fd_completed(MigrationState *s)
 | 
			
		|||
    notifier_list_notify(&migration_state_notifiers, s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void migrate_fd_put_notify(void *opaque)
 | 
			
		||||
{
 | 
			
		||||
    MigrationState *s = opaque;
 | 
			
		||||
    int ret;
 | 
			
		||||
 | 
			
		||||
    qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
 | 
			
		||||
    ret = qemu_file_put_notify(s->file);
 | 
			
		||||
    if (ret) {
 | 
			
		||||
        migrate_fd_error(s);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ssize_t migrate_fd_put_buffer(MigrationState *s, const void *data,
 | 
			
		||||
                              size_t size)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -325,10 +313,6 @@ ssize_t migrate_fd_put_buffer(MigrationState *s, const void *data,
 | 
			
		|||
    if (ret == -1)
 | 
			
		||||
        ret = -(s->get_error(s));
 | 
			
		||||
 | 
			
		||||
    if (ret == -EAGAIN) {
 | 
			
		||||
        qemu_set_fd_handler2(s->fd, NULL, NULL, migrate_fd_put_notify, s);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -425,7 +409,6 @@ int migrate_fd_close(MigrationState *s)
 | 
			
		|||
{
 | 
			
		||||
    int rc = 0;
 | 
			
		||||
    if (s->fd != -1) {
 | 
			
		||||
        qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
 | 
			
		||||
        rc = s->close(s);
 | 
			
		||||
        s->fd = -1;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue