All of lore.kernel.org
 help / color / mirror / Atom feed
From: Juan Quintela <quintela@redhat.com>
To: qemu-devel@nongnu.org
Cc: qemu-block@nongnu.org, Leonardo Bras <leobras@redhat.com>,
	Hailiang Zhang <zhanghailiang@xfusion.com>,
	Peter Xu <peterx@redhat.com>, Fam Zheng <fam@euphon.net>,
	Juan Quintela <quintela@redhat.com>,
	Stefan Hajnoczi <stefanha@redhat.com>
Subject: [PATCH 16/16] qemu-file: Make qemu_fflush() return errors
Date: Tue, 30 May 2023 14:28:13 +0200	[thread overview]
Message-ID: <20230530122813.2674-17-quintela@redhat.com> (raw)
In-Reply-To: <20230530122813.2674-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.

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 migration/qemu-file.h |  2 +-
 migration/colo.c      | 11 +++--------
 migration/migration.c |  7 +------
 migration/qemu-file.c |  7 ++++---
 migration/ram.c       | 22 +++++++---------------
 migration/rdma.c      |  4 +---
 migration/savevm.c    |  3 +--
 7 files changed, 18 insertions(+), 38 deletions(-)

diff --git a/migration/qemu-file.h b/migration/qemu-file.h
index 3575dfa5ff..bc9128d333 100644
--- a/migration/qemu-file.h
+++ b/migration/qemu-file.h
@@ -75,7 +75,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 7cf457a981..3e8df20c55 100644
--- a/migration/qemu-file.c
+++ b/migration/qemu-file.c
@@ -267,12 +267,12 @@ 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)
 {
     g_assert(qemu_file_is_writable(f));
 
-    if (qemu_file_get_error(f)) {
-        return;
+    if (f->last_error) {
+        return f->last_error;
     }
     if (f->iovcnt > 0) {
         Error *local_error = NULL;
@@ -290,6 +290,7 @@ void qemu_fflush(QEMUFile *f)
 
     f->buf_index = 0;
     f->iovcnt = 0;
+    return f->last_error;
 }
 
 /*
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



  parent reply	other threads:[~2023-05-30 12:34 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-30 12:27 [PATCH 00/16] Next round of migration atomic counters Juan Quintela
2023-05-30 12:27 ` [PATCH 01/16] qemu-file: Rename qemu_file_transferred_ fast -> noflush Juan Quintela
2023-05-30 12:36   ` Philippe Mathieu-Daudé
2023-05-30 12:39     ` Philippe Mathieu-Daudé
2023-05-30 12:27 ` [PATCH 02/16] migration: Change qemu_file_transferred to noflush Juan Quintela
2023-05-30 12:37   ` Philippe Mathieu-Daudé
2023-05-30 12:28 ` [PATCH 03/16] migration: Use qemu_file_transferred_noflush() for block migration Juan Quintela
2023-05-30 13:45   ` Fabiano Rosas
2023-05-30 12:28 ` [PATCH 04/16] qemu-file: Don't call qemu_fflush() for read only files Juan Quintela
2023-05-30 14:06   ` Fabiano Rosas
2023-05-30 17:01   ` Richard Henderson
2023-05-30 17:06     ` Juan Quintela
2023-05-30 17:14       ` Richard Henderson
2023-05-30 17:26         ` Juan Quintela
2023-05-30 17:36   ` Juan Quintela
2023-05-30 12:28 ` [PATCH 05/16] qemu-file: We only call qemu_file_transferred_* on the sending side Juan Quintela
2023-05-30 12:28 ` [PATCH 06/16] qemu_file: Use a stat64 for qemu_file_transferred Juan Quintela
2023-05-30 12:28 ` [PATCH 07/16] qemu_file: total_transferred is not used anymore Juan Quintela
2023-05-30 12:28 ` [PATCH 08/16] migration: Use the number of transferred bytes directly Juan Quintela
2023-05-30 12:28 ` [PATCH 09/16] qemu_file: Remove unused qemu_file_transferred() Juan Quintela
2023-05-30 12:28 ` [PATCH 10/16] qemu-file: Remove _noflush from qemu_file_transferred_noflush() Juan Quintela
2023-05-30 13:10   ` Fabiano Rosas
2023-05-30 17:57     ` Juan Quintela
2023-05-30 12:28 ` [PATCH 11/16] migration: migration_transferred_bytes() don't need the QEMUFile Juan Quintela
2023-05-30 12:34   ` Philippe Mathieu-Daudé
2023-05-30 12:28 ` [PATCH 12/16] migration: migration_rate_limit_reset() " Juan Quintela
2023-05-30 12:34   ` Philippe Mathieu-Daudé
2023-05-30 12:28 ` [PATCH 13/16] qemu-file: Simplify qemu_file_get_error() Juan Quintela
2023-05-30 13:41   ` Fabiano Rosas
2023-05-30 12:28 ` [PATCH 14/16] migration: Use migration_transferred_bytes() Juan Quintela
2023-05-30 12:28 ` [PATCH 15/16] migration: Remove transferred atomic counter Juan Quintela
2023-05-30 12:28 ` Juan Quintela [this message]
2023-05-30 12:41   ` [PATCH 16/16] qemu-file: Make qemu_fflush() return errors Philippe Mathieu-Daudé
2023-05-30 12:40 ` [PATCH 00/16] Next round of migration atomic counters 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=20230530122813.2674-17-quintela@redhat.com \
    --to=quintela@redhat.com \
    --cc=fam@euphon.net \
    --cc=leobras@redhat.com \
    --cc=peterx@redhat.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.