From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1O9fHM-0007HP-BN for qemu-devel@nongnu.org; Wed, 05 May 2010 10:08:48 -0400 Received: from [140.186.70.92] (port=52327 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1O9fHK-0007G4-Q0 for qemu-devel@nongnu.org; Wed, 05 May 2010 10:08:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1O9fHI-0002Ju-Rp for qemu-devel@nongnu.org; Wed, 05 May 2010 10:08:46 -0400 Received: from mx1.redhat.com ([209.132.183.28]:38267) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1O9fHI-0002Ji-J1 for qemu-devel@nongnu.org; Wed, 05 May 2010 10:08:44 -0400 Date: Wed, 5 May 2010 19:36:53 +0530 From: Amit Shah Message-ID: <20100505140653.GE27194@amit-x200.redhat.com> References: <1273009170-17530-1-git-send-email-amit.shah@redhat.com> <1273009170-17530-2-git-send-email-amit.shah@redhat.com> <1273009170-17530-3-git-send-email-amit.shah@redhat.com> <1273009170-17530-4-git-send-email-amit.shah@redhat.com> <4BE16F67.6070901@codemonkey.ws> <20100505132347.GB27194@amit-x200.redhat.com> <4BE178A8.8000600@codemonkey.ws> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4BE178A8.8000600@codemonkey.ws> Subject: [Qemu-devel] Re: [PATCH v7 3/6] char: Let writers know how much data was written in case of errors List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori Cc: Paul Brook , Juan Quintela , qemu list , Gerd Hoffmann On (Wed) May 05 2010 [08:54:48], Anthony Liguori wrote: > On 05/05/2010 08:23 AM, Amit Shah wrote: >> On (Wed) May 05 2010 [08:15:19], Anthony Liguori wrote: >> >>> On 05/04/2010 04:39 PM, Amit Shah wrote: >>> >>>> On writing errors, we just returned -1 even if some bytes were already >>>> written out. Ensure we return the number of bytes written before we >>>> return the error (on a subsequent call to qemu_chr_write()). >>>> >>>> Signed-off-by: Amit Shah >>>> --- >>>> qemu-char.c | 12 +++++++++++- >>>> 1 files changed, 11 insertions(+), 1 deletions(-) >>>> >>>> diff --git a/qemu-char.c b/qemu-char.c >>>> index 76ad12c..decf687 100644 >>>> --- a/qemu-char.c >>>> +++ b/qemu-char.c >>>> @@ -507,6 +507,9 @@ int send_all(int fd, const void *buf, int len1) >>>> while (len> 0) { >>>> ret = send(fd, buf, len, 0); >>>> if (ret< 0) { >>>> + if (len1 - len) { >>>> + return len1 - len; >>>> + } >>>> errno = WSAGetLastError(); >>>> if (errno != WSAEWOULDBLOCK) { >>>> return -1; >>>> @@ -531,8 +534,15 @@ static int unix_write(int fd, const uint8_t *buf, int len1) >>>> while (len> 0) { >>>> ret = write(fd, buf, len); >>>> if (ret< 0) { >>>> - if (errno != EINTR&& errno != EAGAIN) >>>> + if (errno == EINTR) { >>>> + continue; >>>> + } >>>> + if (len1 - len) { >>>> + return len1 - len; >>>> + } >>>> + if (errno != EAGAIN) { >>>> return -1; >>>> + } >>>> } else if (ret == 0) { >>>> break; >>>> } else { >>>> >>>> >>> This will break lots of things. The contract for send_all and >>> unix_write is that the transmit all data. >>> >> The current behaviour remains unchanged for all the users. Only callers >> of qemu_chr_write_nb() will get an -EAGAIN return. >> > > No, send_all used to send all data. After your change, it only sends > what it can the first time. The same with unix_write. Where do you see this? Amit