Skip to content

Commit

Permalink
block: Add BdrvChildRole to BdrvChild
Browse files Browse the repository at this point in the history
For now, it is always set to 0.  Later patches in this series will
ensure that all callers pass an appropriate combination of flags.

Signed-off-by: Max Reitz <[email protected]>
Reviewed-by: Eric Blake <[email protected]>
Message-Id: <[email protected]>
Signed-off-by: Kevin Wolf <[email protected]>
  • Loading branch information
XanClic authored and kevmw committed May 18, 2020
1 parent 3284bcf commit 258b776
Show file tree
Hide file tree
Showing 31 changed files with 62 additions and 49 deletions.
11 changes: 8 additions & 3 deletions block.c
Original file line number Diff line number Diff line change
Expand Up @@ -2571,6 +2571,7 @@ static void bdrv_replace_child(BdrvChild *child, BlockDriverState *new_bs)
BdrvChild *bdrv_root_attach_child(BlockDriverState *child_bs,
const char *child_name,
const BdrvChildClass *child_class,
BdrvChildRole child_role,
AioContext *ctx,
uint64_t perm, uint64_t shared_perm,
void *opaque, Error **errp)
Expand All @@ -2592,6 +2593,7 @@ BdrvChild *bdrv_root_attach_child(BlockDriverState *child_bs,
.bs = NULL,
.name = g_strdup(child_name),
.klass = child_class,
.role = child_role,
.perm = perm,
.shared_perm = shared_perm,
.opaque = opaque,
Expand Down Expand Up @@ -2644,6 +2646,7 @@ BdrvChild *bdrv_attach_child(BlockDriverState *parent_bs,
BlockDriverState *child_bs,
const char *child_name,
const BdrvChildClass *child_class,
BdrvChildRole child_role,
Error **errp)
{
BdrvChild *child;
Expand All @@ -2656,7 +2659,7 @@ BdrvChild *bdrv_attach_child(BlockDriverState *parent_bs,
perm, shared_perm, &perm, &shared_perm);

child = bdrv_root_attach_child(child_bs, child_name, child_class,
bdrv_get_aio_context(parent_bs),
child_role, bdrv_get_aio_context(parent_bs),
perm, shared_perm, parent_bs, errp);
if (child == NULL) {
return NULL;
Expand Down Expand Up @@ -2774,7 +2777,7 @@ void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd,
}

bs->backing = bdrv_attach_child(bs, backing_hd, "backing", &child_backing,
errp);
0, errp);
/* If backing_hd was already part of bs's backing chain, and
* inherits_from pointed recursively to bs then let's update it to
* point directly to bs (else it will become NULL). */
Expand Down Expand Up @@ -2965,6 +2968,7 @@ BdrvChild *bdrv_open_child(const char *filename,
QDict *options, const char *bdref_key,
BlockDriverState *parent,
const BdrvChildClass *child_class,
BdrvChildRole child_role,
bool allow_none, Error **errp)
{
BlockDriverState *bs;
Expand All @@ -2975,7 +2979,8 @@ BdrvChild *bdrv_open_child(const char *filename,
return NULL;
}

return bdrv_attach_child(parent, bs, bdref_key, child_class, errp);
return bdrv_attach_child(parent, bs, bdref_key, child_class, child_role,
errp);
}

/*
Expand Down
3 changes: 2 additions & 1 deletion block/backup-top.c
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,8 @@ BlockDriverState *bdrv_backup_top_append(BlockDriverState *source,
source->supported_zero_flags);

bdrv_ref(target);
state->target = bdrv_attach_child(top, target, "target", &child_file, errp);
state->target = bdrv_attach_child(top, target, "target", &child_file, 0,
errp);
if (!state->target) {
bdrv_unref(target);
bdrv_unref(top);
Expand Down
2 changes: 1 addition & 1 deletion block/blkdebug.c
Original file line number Diff line number Diff line change
Expand Up @@ -497,7 +497,7 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags,

/* Open the image file */
bs->file = bdrv_open_child(qemu_opt_get(opts, "x-image"), options, "image",
bs, &child_file, false, &local_err);
bs, &child_file, 0, false, &local_err);
if (local_err) {
ret = -EINVAL;
error_propagate(errp, local_err);
Expand Down
6 changes: 3 additions & 3 deletions block/blklogwrites.c
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ static int blk_log_writes_open(BlockDriverState *bs, QDict *options, int flags,
}

/* Open the file */
bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file, false,
bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file, 0, false,
&local_err);
if (local_err) {
ret = -EINVAL;
Expand All @@ -166,8 +166,8 @@ static int blk_log_writes_open(BlockDriverState *bs, QDict *options, int flags,
}

/* Open the log file */
s->log_file = bdrv_open_child(NULL, options, "log", bs, &child_file, false,
&local_err);
s->log_file = bdrv_open_child(NULL, options, "log", bs, &child_file, 0,
false, &local_err);
if (local_err) {
ret = -EINVAL;
error_propagate(errp, local_err);
Expand Down
2 changes: 1 addition & 1 deletion block/blkreplay.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ static int blkreplay_open(BlockDriverState *bs, QDict *options, int flags,

/* Open the image file */
bs->file = bdrv_open_child(NULL, options, "image",
bs, &child_file, false, &local_err);
bs, &child_file, 0, false, &local_err);
if (local_err) {
ret = -EINVAL;
error_propagate(errp, local_err);
Expand Down
4 changes: 2 additions & 2 deletions block/blkverify.c
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ static int blkverify_open(BlockDriverState *bs, QDict *options, int flags,

/* Open the raw file */
bs->file = bdrv_open_child(qemu_opt_get(opts, "x-raw"), options, "raw",
bs, &child_file, false, &local_err);
bs, &child_file, 0, false, &local_err);
if (local_err) {
ret = -EINVAL;
error_propagate(errp, local_err);
Expand All @@ -134,7 +134,7 @@ static int blkverify_open(BlockDriverState *bs, QDict *options, int flags,

/* Open the test file */
s->test_file = bdrv_open_child(qemu_opt_get(opts, "x-image"), options,
"test", bs, &child_format, false,
"test", bs, &child_format, 0, false,
&local_err);
if (local_err) {
ret = -EINVAL;
Expand Down
4 changes: 2 additions & 2 deletions block/block-backend.c
Original file line number Diff line number Diff line change
Expand Up @@ -423,7 +423,7 @@ BlockBackend *blk_new_open(const char *filename, const char *reference,
return NULL;
}

blk->root = bdrv_root_attach_child(bs, "root", &child_root, blk->ctx,
blk->root = bdrv_root_attach_child(bs, "root", &child_root, 0, blk->ctx,
perm, BLK_PERM_ALL, blk, errp);
if (!blk->root) {
blk_unref(blk);
Expand Down Expand Up @@ -834,7 +834,7 @@ int blk_insert_bs(BlockBackend *blk, BlockDriverState *bs, Error **errp)
{
ThrottleGroupMember *tgm = &blk->public.throttle_group_member;
bdrv_ref(bs);
blk->root = bdrv_root_attach_child(bs, "root", &child_root, blk->ctx,
blk->root = bdrv_root_attach_child(bs, "root", &child_root, 0, blk->ctx,
blk->perm, blk->shared_perm, blk, errp);
if (blk->root == NULL) {
return -EPERM;
Expand Down
2 changes: 1 addition & 1 deletion block/bochs.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ static int bochs_open(BlockDriverState *bs, QDict *options, int flags,
return ret;
}

bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file,
bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file, 0,
false, errp);
if (!bs->file) {
return -EINVAL;
Expand Down
2 changes: 1 addition & 1 deletion block/cloop.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ static int cloop_open(BlockDriverState *bs, QDict *options, int flags,
return ret;
}

bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file,
bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file, 0,
false, errp);
if (!bs->file) {
return -EINVAL;
Expand Down
2 changes: 1 addition & 1 deletion block/copy-on-read.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
static int cor_open(BlockDriverState *bs, QDict *options, int flags,
Error **errp)
{
bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file, false,
bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file, 0, false,
errp);
if (!bs->file) {
return -EINVAL;
Expand Down
2 changes: 1 addition & 1 deletion block/crypto.c
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ static int block_crypto_open_generic(QCryptoBlockFormat format,
unsigned int cflags = 0;
QDict *cryptoopts = NULL;

bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file,
bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file, 0,
false, errp);
if (!bs->file) {
return -EINVAL;
Expand Down
2 changes: 1 addition & 1 deletion block/dmg.c
Original file line number Diff line number Diff line change
Expand Up @@ -439,7 +439,7 @@ static int dmg_open(BlockDriverState *bs, QDict *options, int flags,
return ret;
}

bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file,
bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file, 0,
false, errp);
if (!bs->file) {
return -EINVAL;
Expand Down
2 changes: 1 addition & 1 deletion block/filter-compress.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
static int compress_open(BlockDriverState *bs, QDict *options, int flags,
Error **errp)
{
bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file, false,
bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file, 0, false,
errp);
if (!bs->file) {
return -EINVAL;
Expand Down
2 changes: 1 addition & 1 deletion block/parallels.c
Original file line number Diff line number Diff line change
Expand Up @@ -739,7 +739,7 @@ static int parallels_open(BlockDriverState *bs, QDict *options, int flags,
Error *local_err = NULL;
char *buf;

bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file,
bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file, 0,
false, errp);
if (!bs->file) {
return -EINVAL;
Expand Down
2 changes: 1 addition & 1 deletion block/qcow.c
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ static int qcow_open(BlockDriverState *bs, QDict *options, int flags,
qdict_extract_subqdict(options, &encryptopts, "encrypt.");
encryptfmt = qdict_get_try_str(encryptopts, "format");

bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file,
bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file, 0,
false, errp);
if (!bs->file) {
ret = -EINVAL;
Expand Down
6 changes: 3 additions & 3 deletions block/qcow2.c
Original file line number Diff line number Diff line change
Expand Up @@ -1591,7 +1591,7 @@ static int coroutine_fn qcow2_do_open(BlockDriverState *bs, QDict *options,

/* Open external data file */
s->data_file = bdrv_open_child(NULL, options, "data-file", bs, &child_file,
true, &local_err);
0, true, &local_err);
if (local_err) {
error_propagate(errp, local_err);
ret = -EINVAL;
Expand All @@ -1601,7 +1601,7 @@ static int coroutine_fn qcow2_do_open(BlockDriverState *bs, QDict *options,
if (s->incompatible_features & QCOW2_INCOMPAT_DATA_FILE) {
if (!s->data_file && s->image_data_file) {
s->data_file = bdrv_open_child(s->image_data_file, options,
"data-file", bs, &child_file,
"data-file", bs, &child_file, 0,
false, errp);
if (!s->data_file) {
ret = -EINVAL;
Expand Down Expand Up @@ -1863,7 +1863,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags,
.ret = -EINPROGRESS
};

bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file,
bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file, 0,
false, errp);
if (!bs->file) {
return -EINVAL;
Expand Down
2 changes: 1 addition & 1 deletion block/qed.c
Original file line number Diff line number Diff line change
Expand Up @@ -547,7 +547,7 @@ static int bdrv_qed_open(BlockDriverState *bs, QDict *options, int flags,
.ret = -EINPROGRESS
};

bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file,
bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file, 0,
false, errp);
if (!bs->file) {
return -EINVAL;
Expand Down
4 changes: 2 additions & 2 deletions block/quorum.c
Original file line number Diff line number Diff line change
Expand Up @@ -977,7 +977,7 @@ static int quorum_open(BlockDriverState *bs, QDict *options, int flags,
assert(ret < 32);

s->children[i] = bdrv_open_child(NULL, options, indexstr, bs,
&child_format, false, &local_err);
&child_format, 0, false, &local_err);
if (local_err) {
ret = -EINVAL;
goto close_exit;
Expand Down Expand Up @@ -1053,7 +1053,7 @@ static void quorum_add_child(BlockDriverState *bs, BlockDriverState *child_bs,
/* We can safely add the child now */
bdrv_ref(child_bs);

child = bdrv_attach_child(bs, child_bs, indexstr, &child_format, errp);
child = bdrv_attach_child(bs, child_bs, indexstr, &child_format, 0, errp);
if (child == NULL) {
s->next_child_index--;
goto out;
Expand Down
2 changes: 1 addition & 1 deletion block/raw-format.c
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,7 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags,
BDRVRawState *s = bs->opaque;
int ret;

bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file,
bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file, 0,
false, errp);
if (!bs->file) {
return -EINVAL;
Expand Down
2 changes: 1 addition & 1 deletion block/replication.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ static int replication_open(BlockDriverState *bs, QDict *options,
const char *mode;
const char *top_id;

bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file,
bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file, 0,
false, errp);
if (!bs->file) {
return -EINVAL;
Expand Down
2 changes: 1 addition & 1 deletion block/throttle.c
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ static int throttle_open(BlockDriverState *bs, QDict *options,
int ret;

bs->file = bdrv_open_child(NULL, options, "file", bs,
&child_file, false, errp);
&child_file, 0, false, errp);
if (!bs->file) {
return -EINVAL;
}
Expand Down
2 changes: 1 addition & 1 deletion block/vdi.c
Original file line number Diff line number Diff line change
Expand Up @@ -378,7 +378,7 @@ static int vdi_open(BlockDriverState *bs, QDict *options, int flags,
Error *local_err = NULL;
QemuUUID uuid_link, uuid_parent;

bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file,
bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file, 0,
false, errp);
if (!bs->file) {
return -EINVAL;
Expand Down
2 changes: 1 addition & 1 deletion block/vhdx.c
Original file line number Diff line number Diff line change
Expand Up @@ -996,7 +996,7 @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags,
uint64_t signature;
Error *local_err = NULL;

bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file,
bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file, 0,
false, errp);
if (!bs->file) {
return -EINVAL;
Expand Down
4 changes: 2 additions & 2 deletions block/vmdk.c
Original file line number Diff line number Diff line change
Expand Up @@ -1152,7 +1152,7 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
assert(ret < 32);

extent_file = bdrv_open_child(extent_path, options, extent_opt_prefix,
bs, &child_file, false, &local_err);
bs, &child_file, 0, false, &local_err);
g_free(extent_path);
if (local_err) {
error_propagate(errp, local_err);
Expand Down Expand Up @@ -1257,7 +1257,7 @@ static int vmdk_open(BlockDriverState *bs, QDict *options, int flags,
uint32_t magic;
Error *local_err = NULL;

bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file,
bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file, 0,
false, errp);
if (!bs->file) {
return -EINVAL;
Expand Down
2 changes: 1 addition & 1 deletion block/vpc.c
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags,
int ret;
int64_t bs_size;

bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file,
bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file, 0,
false, errp);
if (!bs->file) {
return -EINVAL;
Expand Down
2 changes: 1 addition & 1 deletion block/vvfat.c
Original file line number Diff line number Diff line change
Expand Up @@ -3183,7 +3183,7 @@ static int enable_write_target(BlockDriverState *bs, Error **errp)
options = qdict_new();
qdict_put_str(options, "write-target.driver", "qcow");
s->qcow = bdrv_open_child(s->qcow_filename, options, "write-target", bs,
&child_vvfat_qcow, false, errp);
&child_vvfat_qcow, 0, false, errp);
qobject_unref(options);
if (!s->qcow) {
ret = -EINVAL;
Expand Down
5 changes: 3 additions & 2 deletions blockjob.c
Original file line number Diff line number Diff line change
Expand Up @@ -217,8 +217,9 @@ int block_job_add_bdrv(BlockJob *job, const char *name, BlockDriverState *bs,
if (job->job.aio_context != qemu_get_aio_context()) {
aio_context_release(job->job.aio_context);
}
c = bdrv_root_attach_child(bs, name, &child_job, job->job.aio_context,
perm, shared_perm, job, errp);
c = bdrv_root_attach_child(bs, name, &child_job, 0,
job->job.aio_context, perm, shared_perm, job,
errp);
if (job->job.aio_context != qemu_get_aio_context()) {
aio_context_acquire(job->job.aio_context);
}
Expand Down
2 changes: 2 additions & 0 deletions include/block/block.h
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,7 @@ BdrvChild *bdrv_open_child(const char *filename,
QDict *options, const char *bdref_key,
BlockDriverState* parent,
const BdrvChildClass *child_class,
BdrvChildRole child_role,
bool allow_none, Error **errp);
BlockDriverState *bdrv_open_blockdev_ref(BlockdevRef *ref, Error **errp);
void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd,
Expand Down Expand Up @@ -598,6 +599,7 @@ BdrvChild *bdrv_attach_child(BlockDriverState *parent_bs,
BlockDriverState *child_bs,
const char *child_name,
const BdrvChildClass *child_class,
BdrvChildRole child_role,
Error **errp);

bool bdrv_op_is_blocked(BlockDriverState *bs, BlockOpType op, Error **errp);
Expand Down
2 changes: 2 additions & 0 deletions include/block/block_int.h
Original file line number Diff line number Diff line change
Expand Up @@ -746,6 +746,7 @@ struct BdrvChild {
BlockDriverState *bs;
char *name;
const BdrvChildClass *klass;
BdrvChildRole role;
void *opaque;

/**
Expand Down Expand Up @@ -1233,6 +1234,7 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
BdrvChild *bdrv_root_attach_child(BlockDriverState *child_bs,
const char *child_name,
const BdrvChildClass *child_class,
BdrvChildRole child_role,
AioContext *ctx,
uint64_t perm, uint64_t shared_perm,
void *opaque, Error **errp);
Expand Down
Loading

0 comments on commit 258b776

Please sign in to comment.