On Wed, 9 Sep 2020 21:59:18 +0300 Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> wrote:
> Now bdrv_append returns status and we can drop all the local_err things > around it. > > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> > --- Reviewed-by: Greg Kurz <gr...@kaod.org> Just one suggestion for a follow-up below... > block.c | 5 +---- > block/backup-top.c | 20 ++++++++------------ > block/commit.c | 5 +---- > block/mirror.c | 6 ++---- > blockdev.c | 4 +--- > tests/test-bdrv-graph-mod.c | 6 +++--- > 6 files changed, 16 insertions(+), 30 deletions(-) > > diff --git a/block.c b/block.c > index 6d35449027..9b624b2535 100644 > --- a/block.c > +++ b/block.c > @@ -3156,7 +3156,6 @@ static BlockDriverState > *bdrv_append_temp_snapshot(BlockDriverState *bs, > int64_t total_size; > QemuOpts *opts = NULL; > BlockDriverState *bs_snapshot = NULL; > - Error *local_err = NULL; > int ret; > > /* if snapshot, we create a temporary backing file and open it > @@ -3203,9 +3202,7 @@ static BlockDriverState > *bdrv_append_temp_snapshot(BlockDriverState *bs, > * order to be able to return one, we have to increase > * bs_snapshot's refcount here */ > bdrv_ref(bs_snapshot); > - bdrv_append(bs_snapshot, bs, &local_err); > - if (local_err) { > - error_propagate(errp, local_err); > + if (bdrv_append(bs_snapshot, bs, errp) < 0) { > bs_snapshot = NULL; > goto out; > } > diff --git a/block/backup-top.c b/block/backup-top.c > index af2f20f346..de9d5e1634 100644 > --- a/block/backup-top.c > +++ b/block/backup-top.c > @@ -192,7 +192,7 @@ BlockDriverState *bdrv_backup_top_append(BlockDriverState > *source, > BlockCopyState **bcs, > Error **errp) > { > - Error *local_err = NULL; > + ERRP_GUARD(); > BDRVBackupTopState *state; > BlockDriverState *top; > bool appended = false; > @@ -225,9 +225,8 @@ BlockDriverState *bdrv_backup_top_append(BlockDriverState > *source, > bdrv_drained_begin(source); > > bdrv_ref(top); > - bdrv_append(top, source, &local_err); > - if (local_err) { > - error_prepend(&local_err, "Cannot append backup-top filter: "); > + if (bdrv_append(top, source, errp) < 0) { > + error_prepend(errp, "Cannot append backup-top filter: "); > goto fail; > } > appended = true; > @@ -237,18 +236,16 @@ BlockDriverState > *bdrv_backup_top_append(BlockDriverState *source, > * we want. > */ > state->active = true; > - bdrv_child_refresh_perms(top, top->backing, &local_err); > - if (local_err) { > - error_prepend(&local_err, > - "Cannot set permissions for backup-top filter: "); > + if (bdrv_child_refresh_perms(top, top->backing, errp) < 0) { > + error_prepend(errp, "Cannot set permissions for backup-top filter: > "); > goto fail; > } > > state->cluster_size = cluster_size; > state->bcs = block_copy_state_new(top->backing, state->target, > - cluster_size, write_flags, &local_err); > - if (local_err) { > - error_prepend(&local_err, "Cannot create block-copy-state: "); > + cluster_size, write_flags, errp); > + if (!state->bcs) { > + error_prepend(errp, "Cannot create block-copy-state: "); > goto fail; > } > *bcs = state->bcs; > @@ -266,7 +263,6 @@ fail: > } > > bdrv_drained_end(source); > - error_propagate(errp, local_err); > > return NULL; > } > diff --git a/block/commit.c b/block/commit.c > index 7732d02dfe..7720d4729b 100644 > --- a/block/commit.c > +++ b/block/commit.c > @@ -253,7 +253,6 @@ void commit_start(const char *job_id, BlockDriverState > *bs, > CommitBlockJob *s; > BlockDriverState *iter; > BlockDriverState *commit_top_bs = NULL; > - Error *local_err = NULL; > int ret; > ... this is unrelated but while reviewing I've noticed that the ret variable isn't really needed. > assert(top != bs); > @@ -292,10 +291,8 @@ void commit_start(const char *job_id, BlockDriverState > *bs, > > commit_top_bs->total_sectors = top->total_sectors; > > - bdrv_append(commit_top_bs, top, &local_err); > - if (local_err) { > + if (bdrv_append(commit_top_bs, top, errp) < 0) { > commit_top_bs = NULL; > - error_propagate(errp, local_err); > goto fail; > } > > diff --git a/block/mirror.c b/block/mirror.c > index e8e8844afc..ca250f765d 100644 > --- a/block/mirror.c > +++ b/block/mirror.c > @@ -1557,7 +1557,6 @@ static BlockJob *mirror_start_job( > BlockDriverState *mirror_top_bs; > bool target_graph_mod; > bool target_is_backing; > - Error *local_err = NULL; > int ret; > > if (granularity == 0) { > @@ -1606,12 +1605,11 @@ static BlockJob *mirror_start_job( > * it alive until block_job_create() succeeds even if bs has no parent. > */ > bdrv_ref(mirror_top_bs); > bdrv_drained_begin(bs); > - bdrv_append(mirror_top_bs, bs, &local_err); > + ret = bdrv_append(mirror_top_bs, bs, errp); > bdrv_drained_end(bs); > > - if (local_err) { > + if (ret < 0) { > bdrv_unref(mirror_top_bs); > - error_propagate(errp, local_err); > return NULL; > } > > diff --git a/blockdev.c b/blockdev.c > index 3848a9c8ab..36bef6b188 100644 > --- a/blockdev.c > +++ b/blockdev.c > @@ -1576,9 +1576,7 @@ static void external_snapshot_prepare(BlkActionState > *common, > * can fail, so we need to do it in .prepare; undoing it for abort is > * always possible. */ > bdrv_ref(state->new_bs); > - bdrv_append(state->new_bs, state->old_bs, &local_err); > - if (local_err) { > - error_propagate(errp, local_err); > + if (bdrv_append(state->new_bs, state->old_bs, errp) < 0) { > goto out; > } > state->overlay_appended = true; > diff --git a/tests/test-bdrv-graph-mod.c b/tests/test-bdrv-graph-mod.c > index 8cff13830e..2b71601c24 100644 > --- a/tests/test-bdrv-graph-mod.c > +++ b/tests/test-bdrv-graph-mod.c > @@ -101,7 +101,7 @@ static BlockDriverState *pass_through_node(const char > *name) > */ > static void test_update_perm_tree(void) > { > - Error *local_err = NULL; > + int ret; > > BlockBackend *root = blk_new(qemu_get_aio_context(), > BLK_PERM_WRITE | BLK_PERM_CONSISTENT_READ, > @@ -114,8 +114,8 @@ static void test_update_perm_tree(void) > bdrv_attach_child(filter, bs, "child", &child_of_bds, > BDRV_CHILD_FILTERED | BDRV_CHILD_PRIMARY, > &error_abort); > > - bdrv_append(filter, bs, &local_err); > - error_free_or_abort(&local_err); > + ret = bdrv_append(filter, bs, NULL); > + assert(ret < 0); > > blk_unref(root); > }