mirror of https://github.com/xemu-project/xemu.git
qemu-file: Make qemu_fflush() return errors
This let us simplify code of this shape. qemu_fflush(f); int ret = qemu_file_get_error(f); if (ret) { return ret; } into: int ret = qemu_fflush(f); if (ret) { return ret; } I updated all callers where there is any error check. qemu_fclose() don't need to check for f->last_error because qemu_fflush() returns it at the beggining of the function. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Fabiano Rosas <farosas@suse.de> Signed-off-by: Juan Quintela <quintela@redhat.com> Message-ID: <20231025091117.6342-13-quintela@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
parent
0f8596180a
commit
be07a0ed22
|
@ -314,9 +314,7 @@ static void colo_send_message(QEMUFile *f, COLOMessage msg,
|
|||
return;
|
||||
}
|
||||
qemu_put_be32(f, msg);
|
||||
qemu_fflush(f);
|
||||
|
||||
ret = qemu_file_get_error(f);
|
||||
ret = qemu_fflush(f);
|
||||
if (ret < 0) {
|
||||
error_setg_errno(errp, -ret, "Can't send COLO message");
|
||||
}
|
||||
|
@ -335,9 +333,7 @@ static void colo_send_message_value(QEMUFile *f, COLOMessage msg,
|
|||
return;
|
||||
}
|
||||
qemu_put_be64(f, value);
|
||||
qemu_fflush(f);
|
||||
|
||||
ret = qemu_file_get_error(f);
|
||||
ret = qemu_fflush(f);
|
||||
if (ret < 0) {
|
||||
error_setg_errno(errp, -ret, "Failed to send value for message:%s",
|
||||
COLOMessage_str(msg));
|
||||
|
@ -483,8 +479,7 @@ static int colo_do_checkpoint_transaction(MigrationState *s,
|
|||
}
|
||||
|
||||
qemu_put_buffer(s->to_dst_file, bioc->data, bioc->usage);
|
||||
qemu_fflush(s->to_dst_file);
|
||||
ret = qemu_file_get_error(s->to_dst_file);
|
||||
ret = qemu_fflush(s->to_dst_file);
|
||||
if (ret < 0) {
|
||||
goto out;
|
||||
}
|
||||
|
|
|
@ -305,12 +305,7 @@ static int migrate_send_rp_message(MigrationIncomingState *mis,
|
|||
qemu_put_be16(mis->to_src_file, (unsigned int)message_type);
|
||||
qemu_put_be16(mis->to_src_file, len);
|
||||
qemu_put_buffer(mis->to_src_file, data, len);
|
||||
qemu_fflush(mis->to_src_file);
|
||||
|
||||
/* It's possible that qemu file got error during sending */
|
||||
ret = qemu_file_get_error(mis->to_src_file);
|
||||
|
||||
return ret;
|
||||
return qemu_fflush(mis->to_src_file);
|
||||
}
|
||||
|
||||
/* Request one page from the source VM at the given start address.
|
||||
|
|
|
@ -262,14 +262,14 @@ static void qemu_iovec_release_ram(QEMUFile *f)
|
|||
* This will flush all pending data. If data was only partially flushed, it
|
||||
* will set an error state.
|
||||
*/
|
||||
void qemu_fflush(QEMUFile *f)
|
||||
int qemu_fflush(QEMUFile *f)
|
||||
{
|
||||
if (!qemu_file_is_writable(f)) {
|
||||
return;
|
||||
return f->last_error;
|
||||
}
|
||||
|
||||
if (qemu_file_get_error(f)) {
|
||||
return;
|
||||
if (f->last_error) {
|
||||
return f->last_error;
|
||||
}
|
||||
if (f->iovcnt > 0) {
|
||||
Error *local_error = NULL;
|
||||
|
@ -287,6 +287,7 @@ void qemu_fflush(QEMUFile *f)
|
|||
|
||||
f->buf_index = 0;
|
||||
f->iovcnt = 0;
|
||||
return f->last_error;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -353,22 +354,12 @@ static ssize_t coroutine_mixed_fn qemu_fill_buffer(QEMUFile *f)
|
|||
*/
|
||||
int qemu_fclose(QEMUFile *f)
|
||||
{
|
||||
int ret, ret2;
|
||||
qemu_fflush(f);
|
||||
ret = qemu_file_get_error(f);
|
||||
|
||||
ret2 = qio_channel_close(f->ioc, NULL);
|
||||
int ret = qemu_fflush(f);
|
||||
int ret2 = qio_channel_close(f->ioc, NULL);
|
||||
if (ret >= 0) {
|
||||
ret = ret2;
|
||||
}
|
||||
g_clear_pointer(&f->ioc, object_unref);
|
||||
|
||||
/* If any error was spotted before closing, we should report it
|
||||
* instead of the close() return value.
|
||||
*/
|
||||
if (f->last_error) {
|
||||
ret = f->last_error;
|
||||
}
|
||||
error_free(f->last_error_obj);
|
||||
g_free(f);
|
||||
trace_qemu_file_fclose();
|
||||
|
|
|
@ -71,7 +71,7 @@ void qemu_file_set_error_obj(QEMUFile *f, int ret, Error *err);
|
|||
void qemu_file_set_error(QEMUFile *f, int ret);
|
||||
int qemu_file_shutdown(QEMUFile *f);
|
||||
QEMUFile *qemu_file_get_return_path(QEMUFile *f);
|
||||
void qemu_fflush(QEMUFile *f);
|
||||
int qemu_fflush(QEMUFile *f);
|
||||
void qemu_file_set_blocking(QEMUFile *f, bool block);
|
||||
int qemu_file_get_to_fd(QEMUFile *f, int fd, size_t size);
|
||||
|
||||
|
|
|
@ -305,17 +305,15 @@ int64_t ramblock_recv_bitmap_send(QEMUFile *file,
|
|||
|
||||
qemu_put_be64(file, size);
|
||||
qemu_put_buffer(file, (const uint8_t *)le_bitmap, size);
|
||||
g_free(le_bitmap);
|
||||
/*
|
||||
* Mark as an end, in case the middle part is screwed up due to
|
||||
* some "mysterious" reason.
|
||||
*/
|
||||
qemu_put_be64(file, RAMBLOCK_RECV_BITMAP_ENDING);
|
||||
qemu_fflush(file);
|
||||
|
||||
g_free(le_bitmap);
|
||||
|
||||
if (qemu_file_get_error(file)) {
|
||||
return qemu_file_get_error(file);
|
||||
int ret = qemu_fflush(file);
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
return size + sizeof(size);
|
||||
|
@ -2996,9 +2994,7 @@ static int ram_save_setup(QEMUFile *f, void *opaque)
|
|||
}
|
||||
|
||||
qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
|
||||
qemu_fflush(f);
|
||||
|
||||
return 0;
|
||||
return qemu_fflush(f);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -3118,10 +3114,8 @@ out:
|
|||
}
|
||||
|
||||
qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
|
||||
qemu_fflush(f);
|
||||
ram_transferred_add(8);
|
||||
|
||||
ret = qemu_file_get_error(f);
|
||||
ret = qemu_fflush(f);
|
||||
}
|
||||
if (ret < 0) {
|
||||
return ret;
|
||||
|
@ -3196,9 +3190,7 @@ static int ram_save_complete(QEMUFile *f, void *opaque)
|
|||
qemu_put_be64(f, RAM_SAVE_FLAG_MULTIFD_FLUSH);
|
||||
}
|
||||
qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
|
||||
qemu_fflush(f);
|
||||
|
||||
return 0;
|
||||
return qemu_fflush(f);
|
||||
}
|
||||
|
||||
static void ram_state_pending_estimate(void *opaque, uint64_t *must_precopy,
|
||||
|
|
|
@ -3853,9 +3853,7 @@ int rdma_registration_start(QEMUFile *f, uint64_t flags)
|
|||
|
||||
trace_rdma_registration_start(flags);
|
||||
qemu_put_be64(f, RAM_SAVE_FLAG_HOOK);
|
||||
qemu_fflush(f);
|
||||
|
||||
return 0;
|
||||
return qemu_fflush(f);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -1583,8 +1583,7 @@ int qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only,
|
|||
}
|
||||
|
||||
flush:
|
||||
qemu_fflush(f);
|
||||
return 0;
|
||||
return qemu_fflush(f);
|
||||
}
|
||||
|
||||
/* Give an estimate of the amount left to be transferred,
|
||||
|
|
Loading…
Reference in New Issue