From: Juan Quintela <quintela@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Leonardo Bras" <leobras@redhat.com>,
"Hailiang Zhang" <zhanghailiang@xfusion.com>,
"Fiona Ebner" <f.ebner@proxmox.com>,
"Peter Xu" <peterx@redhat.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
qemu-block@nongnu.org, "Juan Quintela" <quintela@redhat.com>,
"Fam Zheng" <fam@euphon.net>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>
Subject: [PATCH v2 15/20] qemu-file: Make qemu_fflush() return errors
Date: Tue, 30 May 2023 20:39:36 +0200 [thread overview]
Message-ID: <20230530183941.7223-16-quintela@redhat.com> (raw)
In-Reply-To: <20230530183941.7223-1-quintela@redhat.com>
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>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
In v2: Now that we call always qemu_fflush() for all files, we can
simplify qemu_fclose()
---
migration/qemu-file.h | 2 +-
migration/colo.c | 11 +++--------
migration/migration.c | 7 +------
migration/qemu-file.c | 23 +++++++----------------
migration/ram.c | 22 +++++++---------------
migration/rdma.c | 4 +---
migration/savevm.c | 3 +--
7 files changed, 21 insertions(+), 51 deletions(-)
diff --git a/migration/qemu-file.h b/migration/qemu-file.h
index 507f3bede4..f2c118f342 100644
--- a/migration/qemu-file.h
+++ b/migration/qemu-file.h
@@ -74,7 +74,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);
diff --git a/migration/colo.c b/migration/colo.c
index 72f4f7b37e..4447e34914 100644
--- a/migration/colo.c
+++ b/migration/colo.c
@@ -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;
}
diff --git a/migration/migration.c b/migration/migration.c
index 6ed55d618a..0195105c59 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -297,12 +297,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.
diff --git a/migration/qemu-file.c b/migration/qemu-file.c
index 7200f08ad5..4f9fb1fbd0 100644
--- a/migration/qemu-file.c
+++ b/migration/qemu-file.c
@@ -267,14 +267,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;
@@ -292,6 +292,7 @@ void qemu_fflush(QEMUFile *f)
f->buf_index = 0;
f->iovcnt = 0;
+ return f->last_error;
}
/*
@@ -358,22 +359,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();
diff --git a/migration/ram.c b/migration/ram.c
index cdf7783d65..26baa54d98 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -301,17 +301,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);
@@ -3034,9 +3032,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);
}
/**
@@ -3155,10 +3151,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;
@@ -3235,9 +3229,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,
diff --git a/migration/rdma.c b/migration/rdma.c
index f912a31b45..3ef35fc635 100644
--- a/migration/rdma.c
+++ b/migration/rdma.c
@@ -3886,9 +3886,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);
}
/*
diff --git a/migration/savevm.c b/migration/savevm.c
index 751b4a1e31..1dc46b0967 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -1536,8 +1536,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,
--
2.40.1
next prev parent reply other threads:[~2023-05-30 18:42 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-30 18:39 [PATCH v2 00/20] Next round of migration atomic counters Juan Quintela
2023-05-30 18:39 ` [PATCH v2 01/20] qemu-file: Rename qemu_file_transferred_ fast -> noflush Juan Quintela
2023-05-30 18:39 ` [PATCH v2 02/20] migration: Change qemu_file_transferred to noflush Juan Quintela
2023-05-30 18:39 ` [PATCH v2 03/20] migration: Use qemu_file_transferred_noflush() for block migration Juan Quintela
2023-05-30 18:39 ` [PATCH v2 04/20] qemu-file: We only call qemu_file_transferred_* on the sending side Juan Quintela
2023-06-05 18:18 ` Peter Xu
2023-06-13 16:02 ` Juan Quintela
2023-06-14 13:36 ` Peter Xu
2023-06-21 22:20 ` Juan Quintela
2023-05-30 18:39 ` [PATCH v2 05/20] qemu_file: Use a stat64 for qemu_file_transferred Juan Quintela
2023-06-05 18:22 ` Peter Xu
2023-06-13 16:12 ` Juan Quintela
2023-05-30 18:39 ` [PATCH v2 06/20] qemu_file: total_transferred is not used anymore Juan Quintela
2023-06-14 14:52 ` Peter Xu
2023-06-21 23:05 ` Juan Quintela
2023-06-22 14:45 ` Peter Xu
2023-05-30 18:39 ` [PATCH v2 07/20] migration: Use the number of transferred bytes directly Juan Quintela
2023-05-30 18:39 ` [PATCH v2 08/20] qemu_file: Remove unused qemu_file_transferred() Juan Quintela
2023-05-30 18:39 ` [PATCH v2 09/20] qemu-file: Remove _noflush from qemu_file_transferred_noflush() Juan Quintela
2023-05-30 18:39 ` [PATCH v2 10/20] migration: migration_transferred_bytes() don't need the QEMUFile Juan Quintela
2023-05-30 18:39 ` [PATCH v2 11/20] migration: migration_rate_limit_reset() " Juan Quintela
2023-05-30 18:39 ` [PATCH v2 12/20] qemu-file: Simplify qemu_file_get_error() Juan Quintela
2023-05-30 18:39 ` [PATCH v2 13/20] migration: Use migration_transferred_bytes() Juan Quintela
2023-05-30 18:39 ` [PATCH v2 14/20] migration: Remove transferred atomic counter Juan Quintela
2023-05-30 18:39 ` Juan Quintela [this message]
2023-05-30 18:39 ` [PATCH v2 16/20] migration/rdma: Split qemu_fopen_rdma() into input/output functions Juan Quintela
2023-06-14 15:07 ` Peter Xu
2023-05-30 18:39 ` [PATCH v2 17/20] qemu-file: Remove unused qemu_file_mode_is_not_valid() Juan Quintela
2023-05-30 18:39 ` [PATCH v2 18/20] qemu_file: Make qemu_file_is_writable() static Juan Quintela
2023-06-14 15:54 ` Peter Xu
2023-05-30 18:39 ` [PATCH v2 19/20] qemu-file: Simplify qemu_file_shutdown() Juan Quintela
2023-06-14 15:54 ` Peter Xu
2023-05-30 18:39 ` [PATCH v2 20/20] qemu-file: Make qemu_file_get_error_obj() static Juan Quintela
2023-06-14 15:54 ` Peter Xu
2023-05-31 9:10 ` [PATCH v2 00/20] Next round of migration atomic counters Fiona Ebner
2023-05-31 10:22 ` Juan Quintela
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230530183941.7223-16-quintela@redhat.com \
--to=quintela@redhat.com \
--cc=f.ebner@proxmox.com \
--cc=fam@euphon.net \
--cc=leobras@redhat.com \
--cc=peterx@redhat.com \
--cc=philmd@linaro.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=zhanghailiang@xfusion.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).