[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: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH 2/3] qmp: dump-guest-memory: don't spin if non-blocking fd would block |
Date: |
Tue, 25 Sep 2012 11:01:15 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux) |
Wen Congyang <address@hidden> writes:
> At 09/24/2012 09:34 PM, Luiz Capitulino Wrote:
>> On Mon, 24 Sep 2012 14:27:17 +0800
>> Wen Congyang <address@hidden> wrote:
>>
>>> 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?
>>
>> The problem is with non-blocking fds, where spinning isn't correct, for
>> two reasons:
>
> But, If the fd is non-blocking, errno can't be EAGAIN. So it doesn't spin.
I'm afraid you're confused.
http://pubs.opengroup.org/onlinepubs/009695399/functions/write.html
[EAGAIN] The O_NONBLOCK flag is set for the file descriptor and the
thread would be delayed in the write() operation.
- [Qemu-devel] [PATCH 1/3] qmp: dump-guest-memory: improve schema doc (again), (continued)
Re: [Qemu-devel] [PATCH 0/3]: qmp/hmp: dump-guest-memory fixes, Markus Armbruster, 2012/09/25