From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50709) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WkFAn-0005nP-Tv for qemu-devel@nongnu.org; Tue, 13 May 2014 12:03:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WkFAf-0008Mz-Ou for qemu-devel@nongnu.org; Tue, 13 May 2014 12:03:21 -0400 Received: from mx1.redhat.com ([209.132.183.28]:56727) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WkFAf-0008MP-Gp for qemu-devel@nongnu.org; Tue, 13 May 2014 12:03:13 -0400 From: Markus Armbruster Date: Tue, 13 May 2014 18:02:50 +0200 Message-Id: <1399996972-23429-17-git-send-email-armbru@redhat.com> In-Reply-To: <1399996972-23429-1-git-send-email-armbru@redhat.com> References: <1399996972-23429-1-git-send-email-armbru@redhat.com> Subject: [Qemu-devel] [PATCH 16/18] block/sheepdog: Propagate errors through find_vdi_name() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, MORITA Kazutaka , stefanha@redhat.com Cc: MORITA Kazutaka Signed-off-by: Markus Armbruster --- block/sheepdog.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/block/sheepdog.c b/block/sheepdog.c index d20a94c..2cf192d 100644 --- a/block/sheepdog.c +++ b/block/sheepdog.c @@ -1060,19 +1060,16 @@ static int parse_vdiname(BDRVSheepdogState *s, const char *filename, static int find_vdi_name(BDRVSheepdogState *s, const char *filename, uint32_t snapid, const char *tag, uint32_t *vid, - bool lock) + bool lock, Error **errp) { - Error *local_err = NULL; int ret, fd; SheepdogVdiReq hdr; SheepdogVdiRsp *rsp = (SheepdogVdiRsp *)&hdr; unsigned int wlen, rlen = 0; char buf[SD_MAX_VDI_LEN + SD_MAX_VDI_TAG_LEN]; - fd = connect_to_sdog(s, &local_err); + fd = connect_to_sdog(s, errp); if (fd < 0) { - qerror_report_err(local_err); - error_free(local_err); return fd; } @@ -1097,12 +1094,13 @@ static int find_vdi_name(BDRVSheepdogState *s, const char *filename, ret = do_req(fd, (SheepdogReq *)&hdr, buf, &wlen, &rlen); if (ret) { + error_setg_errno(errp, -ret, "cannot get vdi info"); goto out; } if (rsp->result != SD_RES_SUCCESS) { - error_report("cannot get vdi info, %s, %s %" PRIu32 " %s", - sd_strerror(rsp->result), filename, snapid, tag); + error_setg(errp, "cannot get vdi info, %s, %s %" PRIu32 " %s", + sd_strerror(rsp->result), filename, snapid, tag); if (rsp->result == SD_RES_NO_VDI) { ret = -ENOENT; } else { @@ -1279,8 +1277,10 @@ static int reload_inode(BDRVSheepdogState *s, uint32_t snapid, const char *tag) inode = g_malloc(sizeof(s->inode)); - ret = find_vdi_name(s, s->name, snapid, tag, &vid, false); + ret = find_vdi_name(s, s->name, snapid, tag, &vid, false, &local_err); if (ret) { + qerror_report_err(local_err); + error_free(local_err); goto out; } @@ -1423,8 +1423,10 @@ static int sd_open(BlockDriverState *bs, QDict *options, int flags, goto out; } - ret = find_vdi_name(s, vdi, snapid, tag, &vid, true); + ret = find_vdi_name(s, vdi, snapid, tag, &vid, true, &local_err); if (ret) { + qerror_report_err(local_err); + error_free(local_err); goto out; } -- 1.8.1.4