migration: use qemu_file_set_error to pass error codes back to qemu_savevm_state
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
							
								
									93bf21044c
								
							
						
					
					
						commit
						47c8c17af8
					
				| 
						 | 
				
			
			@ -73,10 +73,10 @@ void do_info_snapshots(Monitor *mon, const QDict *qdict);
 | 
			
		|||
void qemu_announce_self(void);
 | 
			
		||||
 | 
			
		||||
bool qemu_savevm_state_blocked(Error **errp);
 | 
			
		||||
int qemu_savevm_state_begin(QEMUFile *f,
 | 
			
		||||
void qemu_savevm_state_begin(QEMUFile *f,
 | 
			
		||||
                             const MigrationParams *params);
 | 
			
		||||
int qemu_savevm_state_iterate(QEMUFile *f);
 | 
			
		||||
int qemu_savevm_state_complete(QEMUFile *f);
 | 
			
		||||
void qemu_savevm_state_complete(QEMUFile *f);
 | 
			
		||||
void qemu_savevm_state_cancel(void);
 | 
			
		||||
uint64_t qemu_savevm_state_pending(QEMUFile *f, uint64_t max_size);
 | 
			
		||||
int qemu_loadvm_state(QEMUFile *f);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										42
									
								
								savevm.c
								
								
								
								
							
							
						
						
									
										42
									
								
								savevm.c
								
								
								
								
							| 
						 | 
				
			
			@ -1579,7 +1579,7 @@ bool qemu_savevm_state_blocked(Error **errp)
 | 
			
		|||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int qemu_savevm_state_begin(QEMUFile *f,
 | 
			
		||||
void qemu_savevm_state_begin(QEMUFile *f,
 | 
			
		||||
                             const MigrationParams *params)
 | 
			
		||||
{
 | 
			
		||||
    SaveStateEntry *se;
 | 
			
		||||
| 
						 | 
				
			
			@ -1620,11 +1620,10 @@ int qemu_savevm_state_begin(QEMUFile *f,
 | 
			
		|||
 | 
			
		||||
        ret = se->ops->save_live_setup(f, se->opaque);
 | 
			
		||||
        if (ret < 0) {
 | 
			
		||||
            return ret;
 | 
			
		||||
            qemu_file_set_error(f, ret);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    ret = qemu_file_get_error(f);
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			@ -1658,6 +1657,9 @@ int qemu_savevm_state_iterate(QEMUFile *f)
 | 
			
		|||
        ret = se->ops->save_live_iterate(f, se->opaque);
 | 
			
		||||
        trace_savevm_section_end(se->section_id);
 | 
			
		||||
 | 
			
		||||
        if (ret < 0) {
 | 
			
		||||
            qemu_file_set_error(f, ret);
 | 
			
		||||
        }
 | 
			
		||||
        if (ret <= 0) {
 | 
			
		||||
            /* Do not proceed to the next vmstate before this one reported
 | 
			
		||||
               completion of the current stage. This serializes the migration
 | 
			
		||||
| 
						 | 
				
			
			@ -1666,14 +1668,10 @@ int qemu_savevm_state_iterate(QEMUFile *f)
 | 
			
		|||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (ret != 0) {
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
    ret = qemu_file_get_error(f);
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int qemu_savevm_state_complete(QEMUFile *f)
 | 
			
		||||
void qemu_savevm_state_complete(QEMUFile *f)
 | 
			
		||||
{
 | 
			
		||||
    SaveStateEntry *se;
 | 
			
		||||
    int ret;
 | 
			
		||||
| 
						 | 
				
			
			@ -1697,7 +1695,8 @@ int qemu_savevm_state_complete(QEMUFile *f)
 | 
			
		|||
        ret = se->ops->save_live_complete(f, se->opaque);
 | 
			
		||||
        trace_savevm_section_end(se->section_id);
 | 
			
		||||
        if (ret < 0) {
 | 
			
		||||
            return ret;
 | 
			
		||||
            qemu_file_set_error(f, ret);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1725,8 +1724,6 @@ int qemu_savevm_state_complete(QEMUFile *f)
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    qemu_put_byte(f, QEMU_VM_EOF);
 | 
			
		||||
 | 
			
		||||
    return qemu_file_get_error(f);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint64_t qemu_savevm_state_pending(QEMUFile *f, uint64_t max_size)
 | 
			
		||||
| 
						 | 
				
			
			@ -1771,26 +1768,21 @@ static int qemu_savevm_state(QEMUFile *f)
 | 
			
		|||
        return -EINVAL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ret = qemu_savevm_state_begin(f, ¶ms);
 | 
			
		||||
    if (ret < 0)
 | 
			
		||||
        goto out;
 | 
			
		||||
    qemu_savevm_state_begin(f, ¶ms);
 | 
			
		||||
    while (qemu_file_get_error(f) == 0) {
 | 
			
		||||
        if (qemu_savevm_state_iterate(f) > 0) {
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    do {
 | 
			
		||||
        ret = qemu_savevm_state_iterate(f);
 | 
			
		||||
        if (ret < 0)
 | 
			
		||||
            goto out;
 | 
			
		||||
    } while (ret == 0);
 | 
			
		||||
 | 
			
		||||
    ret = qemu_savevm_state_complete(f);
 | 
			
		||||
 | 
			
		||||
out:
 | 
			
		||||
    ret = qemu_file_get_error(f);
 | 
			
		||||
    if (ret == 0) {
 | 
			
		||||
        qemu_savevm_state_complete(f);
 | 
			
		||||
        ret = qemu_file_get_error(f);
 | 
			
		||||
    }
 | 
			
		||||
    if (ret != 0) {
 | 
			
		||||
        qemu_savevm_state_cancel();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue