block: Propagate AioContext change to all children
Instead of propagating any change of a BDS's AioContext only to its file and backing children and letting driver-specific code do the rest, just propagate it to all and drop the thus superfluous implementations of bdrv_{at,de}tach_aio_context() in Quorum, blkverify and VMDK. Signed-off-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Alberto Garcia <berto@igalia.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
1f0c461b82
commit
b97511c7bc
16
block.c
16
block.c
@ -3609,6 +3609,7 @@ AioContext *bdrv_get_aio_context(BlockDriverState *bs)
|
|||||||
void bdrv_detach_aio_context(BlockDriverState *bs)
|
void bdrv_detach_aio_context(BlockDriverState *bs)
|
||||||
{
|
{
|
||||||
BdrvAioNotifier *baf;
|
BdrvAioNotifier *baf;
|
||||||
|
BdrvChild *child;
|
||||||
|
|
||||||
if (!bs->drv) {
|
if (!bs->drv) {
|
||||||
return;
|
return;
|
||||||
@ -3621,11 +3622,8 @@ void bdrv_detach_aio_context(BlockDriverState *bs)
|
|||||||
if (bs->drv->bdrv_detach_aio_context) {
|
if (bs->drv->bdrv_detach_aio_context) {
|
||||||
bs->drv->bdrv_detach_aio_context(bs);
|
bs->drv->bdrv_detach_aio_context(bs);
|
||||||
}
|
}
|
||||||
if (bs->file) {
|
QLIST_FOREACH(child, &bs->children, next) {
|
||||||
bdrv_detach_aio_context(bs->file->bs);
|
bdrv_detach_aio_context(child->bs);
|
||||||
}
|
|
||||||
if (bs->backing) {
|
|
||||||
bdrv_detach_aio_context(bs->backing->bs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bs->aio_context = NULL;
|
bs->aio_context = NULL;
|
||||||
@ -3635,6 +3633,7 @@ void bdrv_attach_aio_context(BlockDriverState *bs,
|
|||||||
AioContext *new_context)
|
AioContext *new_context)
|
||||||
{
|
{
|
||||||
BdrvAioNotifier *ban;
|
BdrvAioNotifier *ban;
|
||||||
|
BdrvChild *child;
|
||||||
|
|
||||||
if (!bs->drv) {
|
if (!bs->drv) {
|
||||||
return;
|
return;
|
||||||
@ -3642,11 +3641,8 @@ void bdrv_attach_aio_context(BlockDriverState *bs,
|
|||||||
|
|
||||||
bs->aio_context = new_context;
|
bs->aio_context = new_context;
|
||||||
|
|
||||||
if (bs->backing) {
|
QLIST_FOREACH(child, &bs->children, next) {
|
||||||
bdrv_attach_aio_context(bs->backing->bs, new_context);
|
bdrv_attach_aio_context(child->bs, new_context);
|
||||||
}
|
|
||||||
if (bs->file) {
|
|
||||||
bdrv_attach_aio_context(bs->file->bs, new_context);
|
|
||||||
}
|
}
|
||||||
if (bs->drv->bdrv_attach_aio_context) {
|
if (bs->drv->bdrv_attach_aio_context) {
|
||||||
bs->drv->bdrv_attach_aio_context(bs, new_context);
|
bs->drv->bdrv_attach_aio_context(bs, new_context);
|
||||||
|
@ -293,22 +293,6 @@ static bool blkverify_recurse_is_first_non_filter(BlockDriverState *bs,
|
|||||||
return bdrv_recurse_is_first_non_filter(s->test_file->bs, candidate);
|
return bdrv_recurse_is_first_non_filter(s->test_file->bs, candidate);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Propagate AioContext changes to ->test_file */
|
|
||||||
static void blkverify_detach_aio_context(BlockDriverState *bs)
|
|
||||||
{
|
|
||||||
BDRVBlkverifyState *s = bs->opaque;
|
|
||||||
|
|
||||||
bdrv_detach_aio_context(s->test_file->bs);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void blkverify_attach_aio_context(BlockDriverState *bs,
|
|
||||||
AioContext *new_context)
|
|
||||||
{
|
|
||||||
BDRVBlkverifyState *s = bs->opaque;
|
|
||||||
|
|
||||||
bdrv_attach_aio_context(s->test_file->bs, new_context);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void blkverify_refresh_filename(BlockDriverState *bs, QDict *options)
|
static void blkverify_refresh_filename(BlockDriverState *bs, QDict *options)
|
||||||
{
|
{
|
||||||
BDRVBlkverifyState *s = bs->opaque;
|
BDRVBlkverifyState *s = bs->opaque;
|
||||||
@ -356,9 +340,6 @@ static BlockDriver bdrv_blkverify = {
|
|||||||
.bdrv_aio_writev = blkverify_aio_writev,
|
.bdrv_aio_writev = blkverify_aio_writev,
|
||||||
.bdrv_aio_flush = blkverify_aio_flush,
|
.bdrv_aio_flush = blkverify_aio_flush,
|
||||||
|
|
||||||
.bdrv_attach_aio_context = blkverify_attach_aio_context,
|
|
||||||
.bdrv_detach_aio_context = blkverify_detach_aio_context,
|
|
||||||
|
|
||||||
.is_filter = true,
|
.is_filter = true,
|
||||||
.bdrv_recurse_is_first_non_filter = blkverify_recurse_is_first_non_filter,
|
.bdrv_recurse_is_first_non_filter = blkverify_recurse_is_first_non_filter,
|
||||||
};
|
};
|
||||||
|
@ -989,27 +989,6 @@ static void quorum_close(BlockDriverState *bs)
|
|||||||
g_free(s->children);
|
g_free(s->children);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void quorum_detach_aio_context(BlockDriverState *bs)
|
|
||||||
{
|
|
||||||
BDRVQuorumState *s = bs->opaque;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < s->num_children; i++) {
|
|
||||||
bdrv_detach_aio_context(s->children[i]->bs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void quorum_attach_aio_context(BlockDriverState *bs,
|
|
||||||
AioContext *new_context)
|
|
||||||
{
|
|
||||||
BDRVQuorumState *s = bs->opaque;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < s->num_children; i++) {
|
|
||||||
bdrv_attach_aio_context(s->children[i]->bs, new_context);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void quorum_add_child(BlockDriverState *bs, BlockDriverState *child_bs,
|
static void quorum_add_child(BlockDriverState *bs, BlockDriverState *child_bs,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
@ -1127,9 +1106,6 @@ static BlockDriver bdrv_quorum = {
|
|||||||
.bdrv_aio_readv = quorum_aio_readv,
|
.bdrv_aio_readv = quorum_aio_readv,
|
||||||
.bdrv_aio_writev = quorum_aio_writev,
|
.bdrv_aio_writev = quorum_aio_writev,
|
||||||
|
|
||||||
.bdrv_detach_aio_context = quorum_detach_aio_context,
|
|
||||||
.bdrv_attach_aio_context = quorum_attach_aio_context,
|
|
||||||
|
|
||||||
.bdrv_add_child = quorum_add_child,
|
.bdrv_add_child = quorum_add_child,
|
||||||
.bdrv_del_child = quorum_del_child,
|
.bdrv_del_child = quorum_del_child,
|
||||||
|
|
||||||
|
23
block/vmdk.c
23
block/vmdk.c
@ -2343,27 +2343,6 @@ static int vmdk_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vmdk_detach_aio_context(BlockDriverState *bs)
|
|
||||||
{
|
|
||||||
BDRVVmdkState *s = bs->opaque;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < s->num_extents; i++) {
|
|
||||||
bdrv_detach_aio_context(s->extents[i].file->bs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void vmdk_attach_aio_context(BlockDriverState *bs,
|
|
||||||
AioContext *new_context)
|
|
||||||
{
|
|
||||||
BDRVVmdkState *s = bs->opaque;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < s->num_extents; i++) {
|
|
||||||
bdrv_attach_aio_context(s->extents[i].file->bs, new_context);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static QemuOptsList vmdk_create_opts = {
|
static QemuOptsList vmdk_create_opts = {
|
||||||
.name = "vmdk-create-opts",
|
.name = "vmdk-create-opts",
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(vmdk_create_opts.head),
|
.head = QTAILQ_HEAD_INITIALIZER(vmdk_create_opts.head),
|
||||||
@ -2433,8 +2412,6 @@ static BlockDriver bdrv_vmdk = {
|
|||||||
.bdrv_get_specific_info = vmdk_get_specific_info,
|
.bdrv_get_specific_info = vmdk_get_specific_info,
|
||||||
.bdrv_refresh_limits = vmdk_refresh_limits,
|
.bdrv_refresh_limits = vmdk_refresh_limits,
|
||||||
.bdrv_get_info = vmdk_get_info,
|
.bdrv_get_info = vmdk_get_info,
|
||||||
.bdrv_detach_aio_context = vmdk_detach_aio_context,
|
|
||||||
.bdrv_attach_aio_context = vmdk_attach_aio_context,
|
|
||||||
|
|
||||||
.supports_backing = true,
|
.supports_backing = true,
|
||||||
.create_opts = &vmdk_create_opts,
|
.create_opts = &vmdk_create_opts,
|
||||||
|
Loading…
Reference in New Issue
Block a user