Skip to content

Commit

Permalink
block: BdrvChildClass: add .get_parent_aio_context handler
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Vladimir Sementsov-Ogievskiy authored and kevmw committed Apr 30, 2021
1 parent ae9d441 commit 3ca1f32
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 0 deletions.
13 changes: 13 additions & 0 deletions block.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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;
Expand Down
9 changes: 9 additions & 0 deletions block/block-backend.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,

Expand All @@ -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,
};

/*
Expand Down
8 changes: 8 additions & 0 deletions blockjob.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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)
Expand Down
2 changes: 2 additions & 0 deletions include/block/block.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);

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 @@ -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;
Expand Down

0 comments on commit 3ca1f32

Please sign in to comment.