[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v4 09/11] block: update return value from bdrv_s
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH v4 09/11] block: update return value from bdrv_snapshot_create |
Date: |
Tue, 09 Apr 2013 18:29:56 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux) |
Pavel Hrdina <address@hidden> writes:
> If we provide error message we don't have to also provide return
> value because we could check if there is any error message or not.
>
> Signed-off-by: Pavel Hrdina <address@hidden>
> Reviewed-by: Eric Blake <address@hidden>
> ---
> block.c | 24 ++++++++++--------------
> block/qcow2-snapshot.c | 12 +++++-------
> block/qcow2.h | 6 +++---
> block/rbd.c | 15 ++++++---------
> block/sheepdog.c | 9 ++++-----
> include/block/block.h | 6 +++---
> include/block/block_int.h | 6 +++---
> qemu-img.c | 9 ++++-----
> savevm.c | 4 ++--
> 9 files changed, 40 insertions(+), 51 deletions(-)
>
> diff --git a/block.c b/block.c
> index 17231d2..d009ce7 100644
> --- a/block.c
> +++ b/block.c
> @@ -3304,27 +3304,23 @@ BlockDriverState *bdrv_snapshots(void)
> return NULL;
> }
>
> -int bdrv_snapshot_create(BlockDriverState *bs,
> - QEMUSnapshotInfo *sn_info,
> - Error **errp)
> +void bdrv_snapshot_create(BlockDriverState *bs,
> + QEMUSnapshotInfo *sn_info,
> + Error **errp)
> {
> BlockDriver *drv = bs->drv;
>
> if (!drv) {
> error_setg(errp, "device '%s' has no medium",
> bdrv_get_device_name(bs));
> - return -ENOMEDIUM;
> - }
> - if (drv->bdrv_snapshot_create) {
> - return drv->bdrv_snapshot_create(bs, sn_info, errp);
> - }
> - if (bs->file) {
> - return bdrv_snapshot_create(bs->file, sn_info, errp);
> + } else if (drv->bdrv_snapshot_create) {
> + drv->bdrv_snapshot_create(bs, sn_info, errp);
> + } else if (bs->file) {
> + bdrv_snapshot_create(bs->file, sn_info, errp);
> + } else {
> + error_setg(errp, "snapshot is not supported for '%s'",
> + bdrv_get_format_name(bs));
> }
> -
> - error_setg(errp, "snapshot is not supported for '%s'",
> - bdrv_get_format_name(bs));
> - return -ENOTSUP;
> }
>
> int bdrv_snapshot_goto(BlockDriverState *bs,
> diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c
> index b34179e..f49b95f 100644
> --- a/block/qcow2-snapshot.c
> +++ b/block/qcow2-snapshot.c
> @@ -315,9 +315,9 @@ static int find_snapshot_by_id_or_name(BlockDriverState
> *bs, const char *name)
> }
>
> /* if no id is provided, a new one is constructed */
> -int qcow2_snapshot_create(BlockDriverState *bs,
> - QEMUSnapshotInfo *sn_info,
> - Error **errp)
> +void qcow2_snapshot_create(BlockDriverState *bs,
> + QEMUSnapshotInfo *sn_info,
> + Error **errp)
> {
> BDRVQcowState *s = bs->opaque;
> QCowSnapshot *new_snapshot_list = NULL;
> @@ -337,7 +337,7 @@ int qcow2_snapshot_create(BlockDriverState *bs,
> /* Check that the ID is unique */
> if (find_snapshot_by_id(bs, sn_info->id_str) >= 0) {
> error_setg(errp, "parameter 'name' has to be unique ID");
> - return -EEXIST;
> + return;
> }
>
> /* Populate sn with passed data */
> @@ -413,14 +413,12 @@ int qcow2_snapshot_create(BlockDriverState *bs,
> qcow2_check_refcounts(bs, &result, 0);
> }
> #endif
> - return 0;
> + return;
>
> fail:
> g_free(sn->id_str);
> g_free(sn->name);
> g_free(l1_table);
> -
> - return ret;
> }
One of the assignment to ret is now redundant: ret = l1_table_offset.
The variable could be eliminated entirely, but that's a matter of taste.
Some people prefer "ret = foo(); if (ret < 0)", others "if (foo() < 0)".
Actually, some of the error_setg()s should perhaps be
error_setg_errno()s. Then we'd still need ret.
>
> /* copy the snapshot 'snapshot_name' into the current disk image */
> diff --git a/block/qcow2.h b/block/qcow2.h
> index 9d93b83..d467478 100644
> --- a/block/qcow2.h
> +++ b/block/qcow2.h
> @@ -382,9 +382,9 @@ int qcow2_discard_clusters(BlockDriverState *bs, uint64_t
> offset,
> int qcow2_zero_clusters(BlockDriverState *bs, uint64_t offset, int
> nb_sectors);
>
> /* qcow2-snapshot.c functions */
> -int qcow2_snapshot_create(BlockDriverState *bs,
> - QEMUSnapshotInfo *sn_info,
> - Error **errp);
> +void qcow2_snapshot_create(BlockDriverState *bs,
> + QEMUSnapshotInfo *sn_info,
> + Error **errp);
> int qcow2_snapshot_goto(BlockDriverState *bs, const char *snapshot_id);
> int qcow2_snapshot_delete(BlockDriverState *bs, const char *snapshot_id);
> int qcow2_snapshot_list(BlockDriverState *bs, QEMUSnapshotInfo **psn_tab);
> diff --git a/block/rbd.c b/block/rbd.c
> index cdbee18..5167f2c 100644
> --- a/block/rbd.c
> +++ b/block/rbd.c
> @@ -815,16 +815,16 @@ static int qemu_rbd_truncate(BlockDriverState *bs,
> int64_t offset)
> return 0;
> }
>
> -static int qemu_rbd_snap_create(BlockDriverState *bs,
> - QEMUSnapshotInfo *sn_info,
> - Error **errp)
> +static void qemu_rbd_snap_create(BlockDriverState *bs,
> + QEMUSnapshotInfo *sn_info,
> + Error **errp)
> {
> BDRVRBDState *s = bs->opaque;
> int r;
>
> if (sn_info->name[0] == '\0') {
> error_setg(errp, "parameter 'name' cannot be empty");
> - return -EINVAL; /* we need a name for rbd snapshots */
> + return; /* we need a name for rbd snapshots */
> }
>
> /*
> @@ -834,21 +834,18 @@ static int qemu_rbd_snap_create(BlockDriverState *bs,
> if (sn_info->id_str[0] != '\0' &&
> strcmp(sn_info->id_str, sn_info->name) != 0) {
> error_setg(errp, "ID and name have to be equal");
> - return -EINVAL;
> + return;
> }
>
> if (strlen(sn_info->name) >= sizeof(sn_info->id_str)) {
> error_setg(errp, "parameter 'name' has to be shorter than 127
> chars");
> - return -ERANGE;
> + return;
> }
>
> r = rbd_snap_create(s->image, sn_info->name);
> if (r < 0) {
> error_setg_errno(errp, -r, "failed to create snapshot");
> - return r;
> }
> -
> - return 0;
> }
>
> static int qemu_rbd_snap_remove(BlockDriverState *bs,
> diff --git a/block/sheepdog.c b/block/sheepdog.c
> index e38bdf5..cf11dfb 100644
> --- a/block/sheepdog.c
> +++ b/block/sheepdog.c
> @@ -1767,9 +1767,9 @@ static int coroutine_fn
> sd_co_flush_to_disk(BlockDriverState *bs)
> return acb->ret;
> }
>
> -static int sd_snapshot_create(BlockDriverState *bs,
> - QEMUSnapshotInfo *sn_info,
> - Error **errp)
> +static void sd_snapshot_create(BlockDriverState *bs,
> + QEMUSnapshotInfo *sn_info,
> + Error **errp)
> {
> BDRVSheepdogState *s = bs->opaque;
> int ret, fd;
> @@ -1784,7 +1784,7 @@ static int sd_snapshot_create(BlockDriverState *bs,
> if (s->is_snapshot) {
> error_setg(errp, "you can't create a snapshot '%s' of a snapshot VDI
> "
> "%s (%" PRIu32 ")", sn_info->name, s->name,
> s->inode.vdi_id);
> - return -EINVAL;
> + return;
> }
>
> dprintf("%s %s\n", sn_info->name, sn_info->id_str);
> @@ -1836,7 +1836,6 @@ static int sd_snapshot_create(BlockDriverState *bs,
>
> cleanup:
> closesocket(fd);
> - return ret;
> }
>
Same here.
> static int sd_snapshot_goto(BlockDriverState *bs, const char *snapshot_id)
> diff --git a/include/block/block.h b/include/block/block.h
> index ee9399c..1a6a6a7 100644
> --- a/include/block/block.h
> +++ b/include/block/block.h
> @@ -331,9 +331,9 @@ BlockStats *bdrv_query_stats(const BlockDriverState *bs);
> int bdrv_can_snapshot(BlockDriverState *bs);
> int bdrv_is_snapshot(BlockDriverState *bs);
> BlockDriverState *bdrv_snapshots(void);
> -int bdrv_snapshot_create(BlockDriverState *bs,
> - QEMUSnapshotInfo *sn_info,
> - Error **errp);
> +void bdrv_snapshot_create(BlockDriverState *bs,
> + QEMUSnapshotInfo *sn_info,
> + Error **errp);
> int bdrv_snapshot_goto(BlockDriverState *bs,
> const char *snapshot_id);
> int bdrv_snapshot_delete(BlockDriverState *bs, const char *snapshot_id);
> diff --git a/include/block/block_int.h b/include/block/block_int.h
> index 2feaa16..8760517 100644
> --- a/include/block/block_int.h
> +++ b/include/block/block_int.h
> @@ -153,9 +153,9 @@ struct BlockDriver {
> int (*bdrv_write_compressed)(BlockDriverState *bs, int64_t sector_num,
> const uint8_t *buf, int nb_sectors);
>
> - int (*bdrv_snapshot_create)(BlockDriverState *bs,
> - QEMUSnapshotInfo *sn_info,
> - Error **errp);
> + void (*bdrv_snapshot_create)(BlockDriverState *bs,
> + QEMUSnapshotInfo *sn_info,
> + Error **errp);
> int (*bdrv_snapshot_goto)(BlockDriverState *bs,
> const char *snapshot_id);
> int (*bdrv_snapshot_delete)(BlockDriverState *bs, const char
> *snapshot_id);
> diff --git a/qemu-img.c b/qemu-img.c
> index d5f81cc..154d913 100644
> --- a/qemu-img.c
> +++ b/qemu-img.c
> @@ -1942,6 +1942,7 @@ static int img_snapshot(int argc, char **argv)
> int action = 0;
> qemu_timeval tv;
> bool quiet = false;
> + Error *local_err;
>
> bdrv_oflags = BDRV_O_FLAGS | BDRV_O_RDWR;
> /* Parse commandline parameters */
> @@ -2018,11 +2019,9 @@ static int img_snapshot(int argc, char **argv)
> sn.date_sec = tv.tv_sec;
> sn.date_nsec = tv.tv_usec * 1000;
>
> - ret = bdrv_snapshot_create(bs, &sn, NULL);
> - if (ret) {
> - error_report("Could not create snapshot '%s': %d (%s)",
> - snapshot_name, ret, strerror(-ret));
> - }
> + local_err = NULL;
> + bdrv_snapshot_create(bs, &sn, &local_err);
> + ret = qemu_img_handle_error(local_err);
> break;
>
> case SNAPSHOT_APPLY:
Error message changes, hopefully for the better. Should be mentioned in
commit message.
> diff --git a/savevm.c b/savevm.c
> index 7b127eb..6ac4ece 100644
> --- a/savevm.c
> +++ b/savevm.c
> @@ -2342,8 +2342,8 @@ SnapshotInfo *qmp_vm_snapshot_save(bool has_name, const
> char *name,
> if (bdrv_can_snapshot(bs1)) {
> /* Write VM state size only to the image that contains the state
> */
> sn->vm_state_size = (bs == bs1 ? vm_state_size : 0);
> - ret = bdrv_snapshot_create(bs1, sn, &local_err);
> - if (ret < 0) {
> + bdrv_snapshot_create(bs1, sn, &local_err);
> + if (error_is_set(&local_err)) {
> error_propagate(errp, local_err);
> }
> }
I think this changes HMP error messages and QMP error objects, hopefully
for the better. Should be mentioned in commit message.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [PATCH v4 09/11] block: update return value from bdrv_snapshot_create,
Markus Armbruster <=