From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:45143) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1REeoX-0002FQ-Q1 for qemu-devel@nongnu.org; Fri, 14 Oct 2011 06:16:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1REeoW-00050j-QG for qemu-devel@nongnu.org; Fri, 14 Oct 2011 06:16:29 -0400 Received: from mail-ww0-f53.google.com ([74.125.82.53]:50221) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1REeoW-00050f-Gz for qemu-devel@nongnu.org; Fri, 14 Oct 2011 06:16:28 -0400 Received: by wwg14 with SMTP id 14so2840573wwg.10 for ; Fri, 14 Oct 2011 03:16:27 -0700 (PDT) Sender: Paolo Bonzini Message-ID: <4E980BF7.6020303@redhat.com> Date: Fri, 14 Oct 2011 12:16:23 +0200 From: Paolo Bonzini MIME-Version: 1.0 References: <1317799065-29668-1-git-send-email-pbonzini@redhat.com> <1317799065-29668-4-git-send-email-pbonzini@redhat.com> <4E980652.60409@redhat.com> In-Reply-To: <4E980652.60409@redhat.com> Content-Type: multipart/mixed; boundary="------------040407070103070202050502" Subject: Re: [Qemu-devel] [PATCH v3 03/15] add qemu_send_full and qemu_recv_full List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Kevin Wolf Cc: qemu-devel@nongnu.org This is a multi-part message in MIME format. --------------040407070103070202050502 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit On 10/14/2011 11:52 AM, Kevin Wolf wrote: > Am 05.10.2011 09:17, schrieb Paolo Bonzini: >> Signed-off-by: Paolo Bonzini >> --- >> osdep.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> qemu-common.h | 4 +++ >> 2 files changed, 71 insertions(+), 0 deletions(-) >> >> diff --git a/osdep.c b/osdep.c >> index 56e6963..718a25d 100644 >> --- a/osdep.c >> +++ b/osdep.c >> @@ -166,3 +166,70 @@ int qemu_accept(int s, struct sockaddr *addr, socklen_t *addrlen) >> >> return ret; >> } >> + >> +/* >> + * A variant of send(2) which handles partial write. >> + * >> + * Return the number of bytes transferred, which is only >> + * smaller than `count' if there is an error. >> + * >> + * This function won't work with non-blocking fd's. >> + * Any of the possibilities with non-bloking fd's is bad: >> + * - return a short write (then name is wrong) >> + * - busy wait adding (errno == EAGAIN) to the loop >> + */ >> +ssize_t qemu_send_full(int fd, const void *buf, size_t count, int flags) >> +{ >> + ssize_t ret = 0; >> + ssize_t total = 0; >> + >> + while (count) { >> + ret = send(fd, buf, count, flags); >> + if (ret< 0) { >> + if (errno == EINTR) { >> + continue; >> + } >> + break; >> + } >> + >> + count -= ret; >> + buf += ret; >> + total += ret; >> + } >> + >> + return total; >> +} >> + >> +/* >> + * A variant of recv(2) which handles partial write. >> + * >> + * Return the number of bytes transferred, which is only >> + * smaller than `count' if there is an error. >> + * >> + * This function won't work with non-blocking fd's. >> + * Any of the possibilities with non-bloking fd's is bad: >> + * - return a short write (then name is wrong) >> + * - busy wait adding (errno == EAGAIN) to the loop >> + */ >> +ssize_t qemu_recv_full(int fd, const void *buf, size_t count, int flags) >> +{ >> + ssize_t ret = 0; >> + ssize_t total = 0; >> + >> + while (count) { >> + ret = recv(fd, buf, count, flags); > > osdep.c: In function 'qemu_recv_full': > osdep.c:220: error: passing argument 2 of 'recv' discards qualifiers > from pointer target type > /usr/include/bits/socket2.h:35: note: expected 'void *' but argument is > of type 'const void *' It's fixed in 4/15's osdep.c. I attach the diff, and pushed the fixed version to github nbd-trim. Also, all branches there are now rebased on top of block branch. Paolo --------------040407070103070202050502 Content-Type: text/x-patch; name="squash.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="squash.patch" diff --git a/osdep.c b/osdep.c index 718a25d..70bad27 100644 --- a/osdep.c +++ b/osdep.c @@ -211,13 +211,13 @@ ssize_t qemu_send_full(int fd, const void *buf, size_t count, int flags) * - return a short write (then name is wrong) * - busy wait adding (errno == EAGAIN) to the loop */ -ssize_t qemu_recv_full(int fd, const void *buf, size_t count, int flags) +ssize_t qemu_recv_full(int fd, void *buf, size_t count, int flags) { ssize_t ret = 0; ssize_t total = 0; while (count) { - ret = recv(fd, buf, count, flags); + ret = qemu_recv(fd, buf, count, flags); if (ret <= 0) { if (ret < 0 && errno == EINTR) { continue; diff --git a/roms/SLOF b/roms/SLOF index d1d6b53..b94bde0 160000 --- a/roms/SLOF +++ b/roms/SLOF @@ -1 +1 @@ -Subproject commit d1d6b53b713a2b7c2c25685268fa932d28a4b4c0 +Subproject commit b94bde008b0d49ec4bfe933e110d0952d032ac28 --------------040407070103070202050502--