aboutsummaryrefslogtreecommitdiff
path: root/block-migration.c
diff options
context:
space:
mode:
authorStefan Hajnoczi <stefanha@redhat.com>2013-02-10 23:12:46 +0100
committerAnthony Liguori <aliguori@us.ibm.com>2013-02-11 08:14:05 -0600
commit2c5a7f20112615ce13a3434ab90bee1ed8d44ebd (patch)
tree31a66d9ac94605b8ca7085fb8c32092618961c7b /block-migration.c
parent9ee0cb201e6bfe03549a649fd165a85cfed34d05 (diff)
block-migration: fix block_save_iterate() return value
The .save_live_iterate() function returns 0 to continue iterating or 1 to stop iterating. Since 16310a3cca7320edb9341c976f7819de0a8c27e0 it only ever returns 0, leading to an infinite loop. Return 1 if we have finished sending dirty blocks. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Message-id: 1360534366-26723-4-git-send-email-stefanha@redhat.com Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'block-migration.c')
-rw-r--r--block-migration.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/block-migration.c b/block-migration.c
index a91d96be5e..bcd0039025 100644
--- a/block-migration.c
+++ b/block-migration.c
@@ -582,7 +582,12 @@ static int block_save_iterate(QEMUFile *f, void *opaque)
qemu_put_be64(f, BLK_MIG_FLAG_EOS);
- return 0;
+ /* Complete when bulk transfer is done and all dirty blocks have been
+ * transferred.
+ */
+ return block_mig_state.bulk_completed &&
+ block_mig_state.submitted == 0 &&
+ block_mig_state.read_done == 0;
}
static int block_save_complete(QEMUFile *f, void *opaque)