block: BdrvChildClass: add .get_parent_aio_context handler
Add new handler to get aio context and implement it in all child classes. Add corresponding public interface to be used soon. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: Alberto Garcia <berto@igalia.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Message-Id: <20210428151804.439460-6-vsementsov@virtuozzo.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
ae9d441706
commit
3ca1f32257
13
block.c
13
block.c
@ -1394,6 +1394,13 @@ static int bdrv_child_cb_update_filename(BdrvChild *c, BlockDriverState *base,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static AioContext *bdrv_child_cb_get_parent_aio_context(BdrvChild *c)
|
||||
{
|
||||
BlockDriverState *bs = c->opaque;
|
||||
|
||||
return bdrv_get_aio_context(bs);
|
||||
}
|
||||
|
||||
const BdrvChildClass child_of_bds = {
|
||||
.parent_is_bds = true,
|
||||
.get_parent_desc = bdrv_child_get_parent_desc,
|
||||
@ -1407,8 +1414,14 @@ const BdrvChildClass child_of_bds = {
|
||||
.can_set_aio_ctx = bdrv_child_cb_can_set_aio_ctx,
|
||||
.set_aio_ctx = bdrv_child_cb_set_aio_ctx,
|
||||
.update_filename = bdrv_child_cb_update_filename,
|
||||
.get_parent_aio_context = bdrv_child_cb_get_parent_aio_context,
|
||||
};
|
||||
|
||||
AioContext *bdrv_child_get_parent_aio_context(BdrvChild *c)
|
||||
{
|
||||
return c->klass->get_parent_aio_context(c);
|
||||
}
|
||||
|
||||
static int bdrv_open_flags(BlockDriverState *bs, int flags)
|
||||
{
|
||||
int open_flags = flags;
|
||||
|
@ -298,6 +298,13 @@ static void blk_root_detach(BdrvChild *child)
|
||||
}
|
||||
}
|
||||
|
||||
static AioContext *blk_root_get_parent_aio_context(BdrvChild *c)
|
||||
{
|
||||
BlockBackend *blk = c->opaque;
|
||||
|
||||
return blk_get_aio_context(blk);
|
||||
}
|
||||
|
||||
static const BdrvChildClass child_root = {
|
||||
.inherit_options = blk_root_inherit_options,
|
||||
|
||||
@ -318,6 +325,8 @@ static const BdrvChildClass child_root = {
|
||||
|
||||
.can_set_aio_ctx = blk_root_can_set_aio_ctx,
|
||||
.set_aio_ctx = blk_root_set_aio_ctx,
|
||||
|
||||
.get_parent_aio_context = blk_root_get_parent_aio_context,
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -163,6 +163,13 @@ static void child_job_set_aio_ctx(BdrvChild *c, AioContext *ctx,
|
||||
job->job.aio_context = ctx;
|
||||
}
|
||||
|
||||
static AioContext *child_job_get_parent_aio_context(BdrvChild *c)
|
||||
{
|
||||
BlockJob *job = c->opaque;
|
||||
|
||||
return job->job.aio_context;
|
||||
}
|
||||
|
||||
static const BdrvChildClass child_job = {
|
||||
.get_parent_desc = child_job_get_parent_desc,
|
||||
.drained_begin = child_job_drained_begin,
|
||||
@ -171,6 +178,7 @@ static const BdrvChildClass child_job = {
|
||||
.can_set_aio_ctx = child_job_can_set_aio_ctx,
|
||||
.set_aio_ctx = child_job_set_aio_ctx,
|
||||
.stay_at_node = true,
|
||||
.get_parent_aio_context = child_job_get_parent_aio_context,
|
||||
};
|
||||
|
||||
void block_job_remove_all_bdrv(BlockJob *job)
|
||||
|
@ -702,6 +702,8 @@ bool bdrv_child_can_set_aio_context(BdrvChild *c, AioContext *ctx,
|
||||
GSList **ignore, Error **errp);
|
||||
bool bdrv_can_set_aio_context(BlockDriverState *bs, AioContext *ctx,
|
||||
GSList **ignore, Error **errp);
|
||||
AioContext *bdrv_child_get_parent_aio_context(BdrvChild *c);
|
||||
|
||||
int bdrv_probe_blocksizes(BlockDriverState *bs, BlockSizes *bsz);
|
||||
int bdrv_probe_geometry(BlockDriverState *bs, HDGeometry *geo);
|
||||
|
||||
|
@ -789,6 +789,8 @@ struct BdrvChildClass {
|
||||
bool (*can_set_aio_ctx)(BdrvChild *child, AioContext *ctx,
|
||||
GSList **ignore, Error **errp);
|
||||
void (*set_aio_ctx)(BdrvChild *child, AioContext *ctx, GSList **ignore);
|
||||
|
||||
AioContext *(*get_parent_aio_context)(BdrvChild *child);
|
||||
};
|
||||
|
||||
extern const BdrvChildClass child_of_bds;
|
||||
|
Loading…
Reference in New Issue
Block a user