We are going to use coroutine mutex to protect intersection of these graph modifying things. Move them to coroutine now.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> --- block/coroutines.h | 11 +++++++++++ block/mirror.c | 5 +++-- block/stream.c | 5 +++-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/block/coroutines.h b/block/coroutines.h index 4cfb4946e6..aa60747b2f 100644 --- a/block/coroutines.h +++ b/block/coroutines.h @@ -26,6 +26,7 @@ #define BLOCK_COROUTINES_INT_H #include "block/block_int.h" +#include "sysemu/block-backend.h" int coroutine_fn bdrv_co_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix); @@ -66,4 +67,14 @@ int coroutine_fn bdrv_co_readv_vmstate(BlockDriverState *bs, int coroutine_fn bdrv_co_writev_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos); +void generated_co_wrapper stream_clean(Job *job); +void coroutine_fn stream_co_clean(Job *job); +int generated_co_wrapper stream_prepare(Job *job); +int coroutine_fn stream_co_prepare(Job *job); + +void generated_co_wrapper mirror_complete(Job *job, Error **errp); +void coroutine_fn mirror_co_complete(Job *job, Error **errp); +int generated_co_wrapper mirror_exit_common(Job *job); +int coroutine_fn mirror_co_exit_common(Job *job); + #endif /* BLOCK_COROUTINES_INT_H */ diff --git a/block/mirror.c b/block/mirror.c index 8e1ad6eceb..91e98b2349 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -18,6 +18,7 @@ #include "trace.h" #include "block/blockjob_int.h" #include "block/block_int.h" +#include "block/coroutines.h" #include "sysemu/block-backend.h" #include "qapi/error.h" #include "qapi/qmp/qerror.h" @@ -625,7 +626,7 @@ static void coroutine_fn mirror_wait_for_all_io(MirrorBlockJob *s) * for .prepare, returns 0 on success and -errno on failure. * for .abort cases, denoted by abort = true, MUST return 0. */ -static int mirror_exit_common(Job *job) +int coroutine_fn mirror_co_exit_common(Job *job) { MirrorBlockJob *s = container_of(job, MirrorBlockJob, common.job); BlockJob *bjob = &s->common; @@ -1103,7 +1104,7 @@ immediate_exit: return ret; } -static void mirror_complete(Job *job, Error **errp) +void coroutine_fn mirror_co_complete(Job *job, Error **errp) { MirrorBlockJob *s = container_of(job, MirrorBlockJob, common.job); BlockDriverState *target; diff --git a/block/stream.c b/block/stream.c index 236384f2f7..8a4b88b223 100644 --- a/block/stream.c +++ b/block/stream.c @@ -15,6 +15,7 @@ #include "trace.h" #include "block/block_int.h" #include "block/blockjob_int.h" +#include "block/coroutines.h" #include "qapi/error.h" #include "qapi/qmp/qerror.h" #include "qemu/ratelimit.h" @@ -58,7 +59,7 @@ static void stream_abort(Job *job) } } -static int stream_prepare(Job *job) +int coroutine_fn stream_co_prepare(Job *job) { StreamBlockJob *s = container_of(job, StreamBlockJob, common.job); BlockJob *bjob = &s->common; @@ -90,7 +91,7 @@ static int stream_prepare(Job *job) return ret; } -static void stream_clean(Job *job) +void coroutine_fn stream_co_clean(Job *job) { StreamBlockJob *s = container_of(job, StreamBlockJob, common.job); BlockJob *bjob = &s->common; -- 2.21.3