qmp: dump-guest-memory: don't spin if non-blocking fd would block

fd_write_vmcore() will indefinitely spin for a non-blocking
file-descriptor that would block. However, if the fd is non-blocking,
how does it make sense to spin?

Change this behavior to return an error instead.

Note that this can only happen with an fd provided by a management
application. The fd opened internally by dump-guest-memory is blocking.

While there, also fix 'writen_size' variable name.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
Luiz Capitulino 2012-09-21 13:17:55 -03:00
parent d691180e41
commit 2f61652d66

15
dump.c
View File

@ -100,18 +100,11 @@ static void dump_error(DumpState *s, const char *reason)
static int fd_write_vmcore(void *buf, size_t size, void *opaque) static int fd_write_vmcore(void *buf, size_t size, void *opaque)
{ {
DumpState *s = opaque; DumpState *s = opaque;
int fd = s->fd; size_t written_size;
size_t writen_size;
/* The fd may be passed from user, and it can be non-blocked */ written_size = qemu_write_full(s->fd, buf, size);
while (size) { if (written_size != size) {
writen_size = qemu_write_full(fd, buf, size); return -1;
if (writen_size != size && errno != EAGAIN) {
return -1;
}
buf += writen_size;
size -= writen_size;
} }
return 0; return 0;