Skip to content

Commit

Permalink
block/copy-before-write: cbw_init(): use options
Browse files Browse the repository at this point in the history
One more step closer to .bdrv_open(): use options instead of plain
arguments. Move to bdrv_open_child() calls, native for drive open
handlers.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
Message-Id: <20210824083856.17408-19-vsementsov@virtuozzo.com>
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
  • Loading branch information
Vladimir Sementsov-Ogievskiy authored and XanClic committed Sep 1, 2021
1 parent 4c1e992 commit f44fd73
Showing 1 changed file with 15 additions and 14 deletions.
29 changes: 15 additions & 14 deletions block/copy-before-write.c
Expand Up @@ -144,25 +144,20 @@ static void cbw_child_perm(BlockDriverState *bs, BdrvChild *c,
}
}

static int cbw_init(BlockDriverState *bs, BlockDriverState *source,
BlockDriverState *target, Error **errp)
static int cbw_init(BlockDriverState *bs, QDict *options, Error **errp)
{
BDRVCopyBeforeWriteState *s = bs->opaque;

bdrv_ref(target);
s->target = bdrv_attach_child(bs, target, "target", &child_of_bds,
BDRV_CHILD_DATA, errp);
if (!s->target) {
error_prepend(errp, "Cannot attach target child: ");
bs->file = bdrv_open_child(NULL, options, "file", bs, &child_of_bds,
BDRV_CHILD_FILTERED | BDRV_CHILD_PRIMARY,
false, errp);
if (!bs->file) {
return -EINVAL;
}

bdrv_ref(source);
bs->file = bdrv_attach_child(bs, source, "file", &child_of_bds,
BDRV_CHILD_FILTERED | BDRV_CHILD_PRIMARY,
errp);
if (!bs->file) {
error_prepend(errp, "Cannot attach file child: ");
s->target = bdrv_open_child(NULL, options, "target", bs, &child_of_bds,
BDRV_CHILD_DATA, false, errp);
if (!s->target) {
return -EINVAL;
}

Expand Down Expand Up @@ -209,6 +204,7 @@ BlockDriverState *bdrv_cbw_append(BlockDriverState *source,
int ret;
BDRVCopyBeforeWriteState *state;
BlockDriverState *top;
QDict *opts;

assert(source->total_sectors == target->total_sectors);

Expand All @@ -220,7 +216,12 @@ BlockDriverState *bdrv_cbw_append(BlockDriverState *source,
}
state = top->opaque;

ret = cbw_init(top, source, target, errp);
opts = qdict_new();
qdict_put_str(opts, "file", bdrv_get_node_name(source));
qdict_put_str(opts, "target", bdrv_get_node_name(target));

ret = cbw_init(top, opts, errp);
qobject_unref(opts);
if (ret < 0) {
goto fail;
}
Expand Down

0 comments on commit f44fd73

Please sign in to comment.