Commit ecb23efea0 for qemu.org

commit ecb23efea0899be6723f4ea9636de5cf7de90cfe
Author: Andrey Gruzdev <andrey.gruzdev@virtuozzo.com>
Date:   Thu Apr 1 12:22:23 2021 +0300

    migration: Fix missing qemu_fflush() on buffer file in bg_migration_thread

    Added missing qemu_fflush() on buffer file holding precopy device state.
    Increased initial QIOChannelBuffer allocation to 512KB to avoid reallocs.
    Typical configurations often require >200KB for device state and VMDESC.

    Fixes: 8518278a6af589ccc401f06e35f171b1e6fae800 (migration: implementation
      of background snapshot thread)
    Signed-off-by: Andrey Gruzdev <andrey.gruzdev@virtuozzo.com>
    Message-Id: <20210401092226.102804-2-andrey.gruzdev@virtuozzo.com>
    Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
    Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

diff --git a/migration/migration.c b/migration/migration.c
index ca8b97baa5..00e13f9d58 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -3812,7 +3812,7 @@ static void *bg_migration_thread(void *opaque)
      * with vCPUs running and, finally, write stashed non-RAM part of
      * the vmstate from the buffer to the migration stream.
      */
-    s->bioc = qio_channel_buffer_new(128 * 1024);
+    s->bioc = qio_channel_buffer_new(512 * 1024);
     qio_channel_set_name(QIO_CHANNEL(s->bioc), "vmstate-buffer");
     fb = qemu_fopen_channel_output(QIO_CHANNEL(s->bioc));
     object_unref(OBJECT(s->bioc));
@@ -3866,6 +3866,12 @@ static void *bg_migration_thread(void *opaque)
     if (qemu_savevm_state_complete_precopy_non_iterable(fb, false, false)) {
         goto fail;
     }
+    /*
+     * Since we are going to get non-iterable state data directly
+     * from s->bioc->data, explicit flush is needed here.
+     */
+    qemu_fflush(fb);
+
     /* Now initialize UFFD context and start tracking RAM writes */
     if (ram_write_tracking_start()) {
         goto fail;