[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 4/5] block: move some mirror and stream handlers to coroutine
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[PATCH 4/5] block: move some mirror and stream handlers to coroutine |
Date: |
Fri, 20 Nov 2020 19:16:21 +0300 |
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 <vsementsov@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
- [PATCH RFC 0/5] Fix accidental crash in iotest 30, Vladimir Sementsov-Ogievskiy, 2020/11/20
- [PATCH 1/5] abort-on-set-to-true, Vladimir Sementsov-Ogievskiy, 2020/11/20
- [PATCH 2/5] iotest-30-shorten: concentrate on failing test case, Vladimir Sementsov-Ogievskiy, 2020/11/20
- [PATCH 3/5] scripts/block-coroutine-wrapper.py: allow more function types, Vladimir Sementsov-Ogievskiy, 2020/11/20
- [PATCH 4/5] block: move some mirror and stream handlers to coroutine,
Vladimir Sementsov-Ogievskiy <=
- [PATCH 5/5] block: protect some graph-modifyng things by mutex, Vladimir Sementsov-Ogievskiy, 2020/11/20
- Re: [PATCH RFC 0/5] Fix accidental crash in iotest 30, no-reply, 2020/11/20
- Re: [PATCH RFC 0/5] Fix accidental crash in iotest 30, Kevin Wolf, 2020/11/20
- Re: [PATCH RFC 0/5] Fix accidental crash in iotest 30, Vladimir Sementsov-Ogievskiy, 2020/11/20
- Re: [PATCH RFC 0/5] Fix accidental crash in iotest 30, Kevin Wolf, 2020/11/20
- Re: [PATCH RFC 0/5] Fix accidental crash in iotest 30, Vladimir Sementsov-Ogievskiy, 2020/11/20
- Re: [PATCH RFC 0/5] Fix accidental crash in iotest 30, Kevin Wolf, 2020/11/23
- Re: [PATCH RFC 0/5] Fix accidental crash in iotest 30, Vladimir Sementsov-Ogievskiy, 2020/11/23
- Re: [PATCH RFC 0/5] Fix accidental crash in iotest 30, Kevin Wolf, 2020/11/23