From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41832) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YRPXq-0001qO-6Q for qemu-devel@nongnu.org; Fri, 27 Feb 2015 13:21:54 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YRPXo-0002PL-4d for qemu-devel@nongnu.org; Fri, 27 Feb 2015 13:21:50 -0500 Received: from mx1.redhat.com ([209.132.183.28]:38878) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YRPXn-0002PC-TZ for qemu-devel@nongnu.org; Fri, 27 Feb 2015 13:21:48 -0500 From: Stefan Hajnoczi Date: Fri, 27 Feb 2015 18:19:05 +0000 Message-Id: <1425061147-1411-68-git-send-email-stefanha@redhat.com> In-Reply-To: <1425061147-1411-1-git-send-email-stefanha@redhat.com> References: <1425061147-1411-1-git-send-email-stefanha@redhat.com> Subject: [Qemu-devel] [PULL 67/69] sheepdog: fix confused return values List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Kevin Wolf , Peter Maydell , Liu Yuan , Stefan Hajnoczi , Markus Armbruster From: Liu Yuan These functions mix up -1 and -errno in return values and would might cause trouble error handling in the call chain. This patch let them return -errno and add some comments. Cc: qemu-devel@nongnu.org Cc: Markus Armbruster Cc: Kevin Wolf Cc: Stefan Hajnoczi Reported-by: Markus Armbruster Signed-off-by: Liu Yuan Message-id: 1424231875-7131-1-git-send-email-namei.unix@gmail.com Signed-off-by: Stefan Hajnoczi --- block/sheepdog.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/block/sheepdog.c b/block/sheepdog.c index a2679c2..60a4853 100644 --- a/block/sheepdog.c +++ b/block/sheepdog.c @@ -545,6 +545,7 @@ static SheepdogAIOCB *sd_aio_setup(BlockDriverState *bs, QEMUIOVector *qiov, return acb; } +/* Return -EIO in case of error, file descriptor on success */ static int connect_to_sdog(BDRVSheepdogState *s, Error **errp) { int fd; @@ -564,11 +565,14 @@ static int connect_to_sdog(BDRVSheepdogState *s, Error **errp) if (fd >= 0) { qemu_set_nonblock(fd); + } else { + fd = -EIO; } return fd; } +/* Return 0 on success and -errno in case of error */ static coroutine_fn int send_co_req(int sockfd, SheepdogReq *hdr, void *data, unsigned int *wlen) { @@ -577,11 +581,13 @@ static coroutine_fn int send_co_req(int sockfd, SheepdogReq *hdr, void *data, ret = qemu_co_send(sockfd, hdr, sizeof(*hdr)); if (ret != sizeof(*hdr)) { error_report("failed to send a req, %s", strerror(errno)); + ret = -socket_error(); return ret; } ret = qemu_co_send(sockfd, data, *wlen); if (ret != *wlen) { + ret = -socket_error(); error_report("failed to send a req, %s", strerror(errno)); } @@ -656,6 +662,11 @@ out: srco->finished = true; } +/* + * Send the request to the sheep in a synchronous manner. + * + * Return 0 on success, -errno in case of error. + */ static int do_req(int sockfd, AioContext *aio_context, SheepdogReq *hdr, void *data, unsigned int *wlen, unsigned int *rlen) { -- 2.1.0