* [Qemu-devel] [RESEND] [PATCH 1/2] migrate.c: migrate_fd_put_buffer(): Do not busyloop: stop writing if EWOULDBLOCK
@ 2009-02-10 3:04 Uri Lublin
0 siblings, 0 replies; only message in thread
From: Uri Lublin @ 2009-02-10 3:04 UTC (permalink / raw)
To: qemu-devel; +Cc: Uri Lublin
Theoretically the migration code is non-blocking, designed for live migration.
Practically migrate_fd_put_buffer busy-loops trying to write. That's since
on many machines EWOULDBLOCK==EAGAIN (e.g. look in
<linux>/include/asm-generic/errno.h).
Busy looping is much worse then blocking (in case a write actually blocks).
Fixed by removing "(s->get_error(s)) == EWOULDBLOCK)" from the while condition.
Signed-off-by: Uri Lublin <uril@redhat.com>
---
migration.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/migration.c b/migration.c
index 0ef777a..e8bafa6 100644
--- a/migration.c
+++ b/migration.c
@@ -168,7 +168,7 @@ ssize_t migrate_fd_put_buffer(void *opaque, const void
*data, size_t size)
do {
ret = s->write(s, data, size);
- } while (ret == -1 && ((s->get_error(s)) == EINTR || (s->get_error(s)) ==
EWOULDBLOCK));
+ } while (ret == -1 && s->get_error(s) == EINTR);
if (ret == -1)
ret = -(s->get_error(s));
--
1.6.0.6
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2009-02-10 3:04 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-02-10 3:04 [Qemu-devel] [RESEND] [PATCH 1/2] migrate.c: migrate_fd_put_buffer(): Do not busyloop: stop writing if EWOULDBLOCK Uri Lublin
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.