From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55401) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VHa2U-0008IE-RQ for qemu-devel@nongnu.org; Thu, 05 Sep 2013 09:56:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VHa2N-0003K5-TO for qemu-devel@nongnu.org; Thu, 05 Sep 2013 09:56:02 -0400 Received: from mx1.redhat.com ([209.132.183.28]:17704) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VHa2N-0003K0-BU for qemu-devel@nongnu.org; Thu, 05 Sep 2013 09:55:55 -0400 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r85DtscR020802 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 5 Sep 2013 09:55:54 -0400 From: Max Reitz Date: Thu, 5 Sep 2013 15:55:38 +0200 Message-Id: <1378389342-4749-3-git-send-email-mreitz@redhat.com> In-Reply-To: <1378389342-4749-1-git-send-email-mreitz@redhat.com> References: <1378389342-4749-1-git-send-email-mreitz@redhat.com> Subject: [Qemu-devel] [RFC v2 2/6] bdrv: Use "Error" for creating images List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Kevin Wolf , Stefan Hajnoczi , Max Reitz Add an Error ** parameter to BlockDriver.bdrv_create to allow more specific error messages. Signed-off-by: Max Reitz --- block.c | 2 +- block/cow.c | 3 ++- block/gluster.c | 2 +- block/iscsi.c | 3 ++- block/qcow.c | 3 ++- block/qcow2.c | 3 ++- block/qed.c | 3 ++- block/raw-posix.c | 6 ++++-- block/raw-win32.c | 3 ++- block/rbd.c | 3 ++- block/sheepdog.c | 3 ++- block/ssh.c | 3 ++- block/vdi.c | 3 ++- block/vmdk.c | 3 ++- block/vpc.c | 3 ++- include/block/block_int.h | 3 ++- 16 files changed, 32 insertions(+), 17 deletions(-) diff --git a/block.c b/block.c index c9cb371..f485906 100644 --- a/block.c +++ b/block.c @@ -374,7 +374,7 @@ static void coroutine_fn bdrv_create_co_entry(void *opaque) CreateCo *cco = opaque; assert(cco->drv); - cco->ret = cco->drv->bdrv_create(cco->filename, cco->options); + cco->ret = cco->drv->bdrv_create(cco->filename, cco->options, NULL); } int bdrv_create(BlockDriver *drv, const char* filename, diff --git a/block/cow.c b/block/cow.c index 4961ca0..207fea1 100644 --- a/block/cow.c +++ b/block/cow.c @@ -256,7 +256,8 @@ static void cow_close(BlockDriverState *bs) { } -static int cow_create(const char *filename, QEMUOptionParameter *options) +static int cow_create(const char *filename, QEMUOptionParameter *options, + Error **errp) { struct cow_header_v2 cow_header; struct stat st; diff --git a/block/gluster.c b/block/gluster.c index 6c7b000..256de10 100644 --- a/block/gluster.c +++ b/block/gluster.c @@ -357,7 +357,7 @@ out: } static int qemu_gluster_create(const char *filename, - QEMUOptionParameter *options) + QEMUOptionParameter *options, Error **errp) { struct glfs *glfs; struct glfs_fd *fd; diff --git a/block/iscsi.c b/block/iscsi.c index 2464f19..3384704 100644 --- a/block/iscsi.c +++ b/block/iscsi.c @@ -1238,7 +1238,8 @@ static int iscsi_has_zero_init(BlockDriverState *bs) return 0; } -static int iscsi_create(const char *filename, QEMUOptionParameter *options) +static int iscsi_create(const char *filename, QEMUOptionParameter *options, + Error **errp) { int ret = 0; int64_t total_size = 0; diff --git a/block/qcow.c b/block/qcow.c index 9ac9120..6f7e73d 100644 --- a/block/qcow.c +++ b/block/qcow.c @@ -652,7 +652,8 @@ static void qcow_close(BlockDriverState *bs) error_free(s->migration_blocker); } -static int qcow_create(const char *filename, QEMUOptionParameter *options) +static int qcow_create(const char *filename, QEMUOptionParameter *options, + Error **errp) { int header_size, backing_filename_len, l1_size, shift, i; QCowHeader header; diff --git a/block/qcow2.c b/block/qcow2.c index 33168b0..98d1551 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -1457,7 +1457,8 @@ out: return ret; } -static int qcow2_create(const char *filename, QEMUOptionParameter *options) +static int qcow2_create(const char *filename, QEMUOptionParameter *options, + Error **errp) { const char *backing_file = NULL; const char *backing_fmt = NULL; diff --git a/block/qed.c b/block/qed.c index 927f30b..1a9d01b 100644 --- a/block/qed.c +++ b/block/qed.c @@ -604,7 +604,8 @@ out: return ret; } -static int bdrv_qed_create(const char *filename, QEMUOptionParameter *options) +static int bdrv_qed_create(const char *filename, QEMUOptionParameter *options, + Error **errp) { uint64_t image_size = 0; uint32_t cluster_size = QED_DEFAULT_CLUSTER_SIZE; diff --git a/block/raw-posix.c b/block/raw-posix.c index 19068b1..22c8303 100644 --- a/block/raw-posix.c +++ b/block/raw-posix.c @@ -1041,7 +1041,8 @@ static int64_t raw_get_allocated_file_size(BlockDriverState *bs) return (int64_t)st.st_blocks * 512; } -static int raw_create(const char *filename, QEMUOptionParameter *options) +static int raw_create(const char *filename, QEMUOptionParameter *options, + Error **errp) { int fd; int result = 0; @@ -1500,7 +1501,8 @@ static coroutine_fn BlockDriverAIOCB *hdev_aio_discard(BlockDriverState *bs, cb, opaque, QEMU_AIO_DISCARD|QEMU_AIO_BLKDEV); } -static int hdev_create(const char *filename, QEMUOptionParameter *options) +static int hdev_create(const char *filename, QEMUOptionParameter *options, + Error **errp) { int fd; int ret = 0; diff --git a/block/raw-win32.c b/block/raw-win32.c index 395c912..1b287bc 100644 --- a/block/raw-win32.c +++ b/block/raw-win32.c @@ -421,7 +421,8 @@ static int64_t raw_get_allocated_file_size(BlockDriverState *bs) return st.st_size; } -static int raw_create(const char *filename, QEMUOptionParameter *options) +static int raw_create(const char *filename, QEMUOptionParameter *options, + Error **errp) { int fd; int64_t total_size = 0; diff --git a/block/rbd.c b/block/rbd.c index dc06117..06cbef7 100644 --- a/block/rbd.c +++ b/block/rbd.c @@ -287,7 +287,8 @@ static int qemu_rbd_set_conf(rados_t cluster, const char *conf) return ret; } -static int qemu_rbd_create(const char *filename, QEMUOptionParameter *options) +static int qemu_rbd_create(const char *filename, QEMUOptionParameter *options, + Error **errp) { int64_t bytes = 0; int64_t objsize; diff --git a/block/sheepdog.c b/block/sheepdog.c index b4a86ea..b1a0f7a 100644 --- a/block/sheepdog.c +++ b/block/sheepdog.c @@ -1438,7 +1438,8 @@ out: return ret; } -static int sd_create(const char *filename, QEMUOptionParameter *options) +static int sd_create(const char *filename, QEMUOptionParameter *options, + Error **errp) { int ret = 0; uint32_t vid = 0, base_vid = 0; diff --git a/block/ssh.c b/block/ssh.c index 23cd1f0..aa63c9d 100644 --- a/block/ssh.c +++ b/block/ssh.c @@ -651,7 +651,8 @@ static QEMUOptionParameter ssh_create_options[] = { { NULL } }; -static int ssh_create(const char *filename, QEMUOptionParameter *options) +static int ssh_create(const char *filename, QEMUOptionParameter *options, + Error **errp) { int r, ret; Error *local_err = NULL; diff --git a/block/vdi.c b/block/vdi.c index df0be42..c22f94c 100644 --- a/block/vdi.c +++ b/block/vdi.c @@ -634,7 +634,8 @@ static int vdi_co_write(BlockDriverState *bs, return ret; } -static int vdi_create(const char *filename, QEMUOptionParameter *options) +static int vdi_create(const char *filename, QEMUOptionParameter *options, + Error **errp) { int fd; int result = 0; diff --git a/block/vmdk.c b/block/vmdk.c index bf424b1..eb8bba2 100644 --- a/block/vmdk.c +++ b/block/vmdk.c @@ -1535,7 +1535,8 @@ static int filename_decompose(const char *filename, char *path, char *prefix, return VMDK_OK; } -static int vmdk_create(const char *filename, QEMUOptionParameter *options) +static int vmdk_create(const char *filename, QEMUOptionParameter *options, + Error **errp) { int fd, idx = 0; char desc[BUF_SIZE]; diff --git a/block/vpc.c b/block/vpc.c index ed00370..db61274 100644 --- a/block/vpc.c +++ b/block/vpc.c @@ -684,7 +684,8 @@ static int create_fixed_disk(int fd, uint8_t *buf, int64_t total_size) return ret; } -static int vpc_create(const char *filename, QEMUOptionParameter *options) +static int vpc_create(const char *filename, QEMUOptionParameter *options, + Error **errp) { uint8_t buf[1024]; struct vhd_footer *footer = (struct vhd_footer *) buf; diff --git a/include/block/block_int.h b/include/block/block_int.h index b05f850..84001b8 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -107,7 +107,8 @@ struct BlockDriver { const uint8_t *buf, int nb_sectors); void (*bdrv_close)(BlockDriverState *bs); void (*bdrv_rebind)(BlockDriverState *bs); - int (*bdrv_create)(const char *filename, QEMUOptionParameter *options); + int (*bdrv_create)(const char *filename, QEMUOptionParameter *options, + Error **errp); int (*bdrv_set_key)(BlockDriverState *bs, const char *key); int (*bdrv_make_empty)(BlockDriverState *bs); /* aio */ -- 1.8.3.1