[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 2/3] qmp: dump-guest-memory: don't spin if non-b
From: |
Wen Congyang |
Subject: |
Re: [Qemu-devel] [PATCH 2/3] qmp: dump-guest-memory: don't spin if non-blocking fd would block |
Date: |
Mon, 24 Sep 2012 14:27:17 +0800 |
User-agent: |
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100413 Fedora/3.0.4-2.fc13 Thunderbird/3.0.4 |
At 09/22/2012 01:07 AM, Luiz Capitulino Wrote:
> 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.
>
> Signed-off-by: Luiz Capitulino <address@hidden>
> ---
> dump.c | 13 +++----------
> 1 file changed, 3 insertions(+), 10 deletions(-)
>
> diff --git a/dump.c b/dump.c
> index 2bf8d8d..5eea015 100644
> --- a/dump.c
> +++ b/dump.c
> @@ -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)
> {
> DumpState *s = opaque;
> - int fd = s->fd;
> size_t writen_size;
>
> - /* The fd may be passed from user, and it can be non-blocked */
> - while (size) {
> - writen_size = qemu_write_full(fd, buf, size);
> - if (writen_size != size && errno != EAGAIN) {
Hmm, if the fd is a blocking fd, errno can't be EAGAIN. So the
function doesn't spin. What problems do you meet?
Thanks
Wen Congyang
> - return -1;
> - }
> -
> - buf += writen_size;
> - size -= writen_size;
> + writen_size = qemu_write_full(s->fd, buf, size);
> + if (writen_size != size) {
> + return -1;
> }
>
> return 0;
Re: [Qemu-devel] [PATCH 0/3]: qmp/hmp: dump-guest-memory fixes, Markus Armbruster, 2012/09/25