Amit Shah <[email protected]> writes:

> On (Fri) 29 Mar 2013 [07:24:07], Anthony Liguori wrote:
>> Amit Shah <[email protected]> writes:
>> 
>> > On (Tue) 05 Mar 2013 [23:21:18], Amit Shah wrote:
>> >> From: Anthony Liguori <[email protected]>
>> >> 
>> >> This is a special GSource that supports CharDriverState style
>> >> poll callbacks.
>> >> 
>> >> For reviewability and bisectability, this code is #if 0'd out in this
>> >> patch to avoid unused warnings since all of the functions are static.
>> >> 
>> >> Signed-off-by: Anthony Liguori <[email protected]>
>> >> Signed-off-by: Amit Shah <[email protected]>
>> >
>> >
>> >> +static int io_channel_send_all(GIOChannel *fd, const void *_buf, int 
>> >> len1)
>> >> +{
>> >> +    GIOStatus status;
>> >> +    gsize bytes_written;
>> >> +    int len;
>> >> +    const uint8_t *buf = _buf;
>> >> +
>> >> +    len = len1;
>> >> +    while (len > 0) {
>> >> +        status = g_io_channel_write_chars(fd, (const gchar *)buf, len,
>> >> +                                          &bytes_written, NULL);
>> >> +        if (status != G_IO_STATUS_NORMAL) {
>> >> +            if (status != G_IO_STATUS_AGAIN) {
>> >> +                return -1;
>> >> +            }
>> >
>> > It's not quite right to return -1 here; previous iterations of the
>> > while loop could have successfully written data, and (len1 - len)
>> > could be +ve.
>> 
>> Once -1 is returned, it's a terminal error.  It doesn't matter that we
>> may have written some data.
>
> Why do you say that?

Because you're quoting the wrong patch :-)  This bit is rewritten by a
later patch which is the source of your problem below.  In the patch you
quote, we busy spin until all data is written.  However, with:

    commit 23673ca740e0eda66901ca801a5a901df378b063
    Author: Anthony Liguori <[email protected]>
    Date:   Tue Mar 5 23:21:23 2013 +0530
    
        qemu-char: add watch support

We started to return EAGAIN even if we have a partially successful
write.  I'm running a patch through testing right now that rewrites this
function to have sane semantics (return bytes written on partial write).

I'll post as soon as testing completes.

Regards,

Anthony Liguori

Reply via email to