From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:36201) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1REjQD-0005ym-2h for qemu-devel@nongnu.org; Fri, 14 Oct 2011 11:11:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1REjQB-0005P3-U8 for qemu-devel@nongnu.org; Fri, 14 Oct 2011 11:11:41 -0400 Received: from mail-wy0-f173.google.com ([74.125.82.173]:51159) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1REjQB-0005Ot-OY for qemu-devel@nongnu.org; Fri, 14 Oct 2011 11:11:39 -0400 Received: by wyh22 with SMTP id 22so3473617wyh.4 for ; Fri, 14 Oct 2011 08:11:38 -0700 (PDT) Sender: Paolo Bonzini Message-ID: <4E985121.7050707@redhat.com> Date: Fri, 14 Oct 2011 17:11:29 +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> <4E980BF7.6020303@redhat.com> In-Reply-To: <4E980BF7.6020303@redhat.com> Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit 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: , Cc: Kevin Wolf , qemu-devel@nongnu.org On 10/14/2011 12:16 PM, Paolo Bonzini wrote: > 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. Let's keep this out of 1.0 (having to choose I very much choose scsi over nbd! :)). I'll try to get all the prerequisites in though, so that they will get thorough testing and the nbd parts will be easier to manage afterwards. Paolo