From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50662) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WkFAl-0005hA-A0 for qemu-devel@nongnu.org; Tue, 13 May 2014 12:03:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WkFAe-0008Lg-G9 for qemu-devel@nongnu.org; Tue, 13 May 2014 12:03:19 -0400 Received: from mx1.redhat.com ([209.132.183.28]:31404) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WkFAe-0008LR-8m for qemu-devel@nongnu.org; Tue, 13 May 2014 12:03:12 -0400 From: Markus Armbruster Date: Tue, 13 May 2014 18:02:48 +0200 Message-Id: <1399996972-23429-15-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 14/18] block/sheepdog: Propagate errors through sd_prealloc() 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 | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/block/sheepdog.c b/block/sheepdog.c index b932d68..a8385bb 100644 --- a/block/sheepdog.c +++ b/block/sheepdog.c @@ -1537,27 +1537,24 @@ static int do_sd_create(BDRVSheepdogState *s, uint32_t *vdi_id, int snapshot) return 0; } -static int sd_prealloc(const char *filename) +static int sd_prealloc(const char *filename, Error **errp) { BlockDriverState *bs = NULL; uint32_t idx, max_idx; int64_t vdi_size; void *buf = g_malloc0(SD_DATA_OBJ_SIZE); - Error *local_err = NULL; int ret; ret = bdrv_open(&bs, filename, NULL, NULL, BDRV_O_RDWR | BDRV_O_PROTOCOL, - NULL, &local_err); + NULL, errp); if (ret < 0) { - qerror_report_err(local_err); - error_free(local_err); goto out; } vdi_size = bdrv_getlength(bs); if (vdi_size < 0) { ret = vdi_size; - goto out; + goto out_setg; } max_idx = DIV_ROUND_UP(vdi_size, SD_DATA_OBJ_SIZE); @@ -1568,13 +1565,15 @@ static int sd_prealloc(const char *filename) */ ret = bdrv_pread(bs, idx * SD_DATA_OBJ_SIZE, buf, SD_DATA_OBJ_SIZE); if (ret < 0) { - goto out; + goto out_setg; } ret = bdrv_pwrite(bs, idx * SD_DATA_OBJ_SIZE, buf, SD_DATA_OBJ_SIZE); if (ret < 0) { - goto out; + goto out_setg; } } +out_setg: + error_setg_errno(errp, -ret, "Can't pre-allocate"); out: if (bs) { bdrv_unref(bs); @@ -1734,7 +1733,11 @@ static int sd_create(const char *filename, QEMUOptionParameter *options, goto out; } - ret = sd_prealloc(filename); + ret = sd_prealloc(filename, &local_err); + if (ret < 0) { + qerror_report_err(local_err); + error_free(local_err); + } out: g_free(s); return ret; -- 1.8.1.4