>From 2d875410cb168fa728dcde96885a3e4ddfd0bb58 Mon Sep 17 00:00:00 2001 From: Dor Laor Date: Thu, 21 May 2009 12:29:39 +0300 Subject: [PATCH] The migration code is non-blocking, designed for live migration. Practically migrate_fd_put_buffer busy-loops trying to write, as on many machines EWOULDBLOCK==EAGAIN (look in include/asm-generic/errno.h). Based on Uri Lublin's patch. Signed-off-by: Dor Laor --- qemu/buffered_file.c | 4 ++-- qemu/migration.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/qemu/buffered_file.c b/qemu/buffered_file.c index be5baea..34cde6e 100644 --- a/qemu/buffered_file.c +++ b/qemu/buffered_file.c @@ -86,7 +86,7 @@ static void buffered_flush(QEMUFileBuffered *s) ret = s->put_buffer(s->opaque, s->buffer + offset, s->buffer_size - offset); - if (ret == -EAGAIN) { + if (ret == -EAGAIN || ret == -EWOULDBLOCK) { dprintf("backend not ready, freezing\n"); s->freeze_output = 1; break; @@ -132,7 +132,7 @@ static int buffered_put_buffer(void *opaque, const uint8_t *buf, int64_t pos, in } ret = s->put_buffer(s->opaque, buf + offset, size - offset); - if (ret == -EAGAIN) { + if (ret == -EAGAIN || ret ==-EWOULDBLOCK) { dprintf("backend not ready, freezing\n"); s->freeze_output = 1; break; diff --git a/qemu/migration.c b/qemu/migration.c index 85757c5..8846eee 100644 --- a/qemu/migration.c +++ b/qemu/migration.c @@ -174,7 +174,7 @@ ssize_t migrate_fd_put_buffer(void *opaque, const void *data, size_t size) if (ret == -1) ret = -(s->get_error(s)); - if (ret == -EAGAIN) + if (ret == -EAGAIN || ret == -EWOULDBLOCK) qemu_set_fd_handler2(s->fd, NULL, NULL, migrate_fd_put_notify, s); return ret; -- 1.5.6.6