[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH RFC 5/9] qed: Implement AioContext drain ops
From: |
Fam Zheng |
Subject: |
[Qemu-block] [PATCH RFC 5/9] qed: Implement AioContext drain ops |
Date: |
Wed, 29 Nov 2017 22:49:52 +0800 |
Signed-off-by: Fam Zheng <address@hidden>
---
block/qed.c | 34 +++++++++++++++++++++++++---------
1 file changed, 25 insertions(+), 9 deletions(-)
diff --git a/block/qed.c b/block/qed.c
index 821dcaa055..8ddaa31e7c 100644
--- a/block/qed.c
+++ b/block/qed.c
@@ -337,12 +337,33 @@ static void qed_cancel_need_check_timer(BDRVQEDState *s)
timer_del(s->need_check_timer);
}
+static void bdrv_qed_drained_begin(void *opaque)
+{
+ BlockDriverState *bs = opaque;
+ BDRVQEDState *s = bs->opaque;
+
+ /* Fire the timer immediately in order to start doing I/O as soon as the
+ * header is flushed.
+ */
+ if (s->need_check_timer && timer_pending(s->need_check_timer)) {
+ qed_cancel_need_check_timer(s);
+ qed_need_check_timer_entry(s);
+ }
+}
+
+static void bdrv_qed_drained_end(void *opaque)
+{
+}
+
static void bdrv_qed_detach_aio_context(BlockDriverState *bs)
{
BDRVQEDState *s = bs->opaque;
qed_cancel_need_check_timer(s);
timer_free(s->need_check_timer);
+ aio_context_del_drain_ops(bdrv_get_aio_context(bs),
+ bdrv_qed_drained_begin, bdrv_qed_drained_end,
+ bs);
}
static void bdrv_qed_attach_aio_context(BlockDriverState *bs,
@@ -356,19 +377,14 @@ static void bdrv_qed_attach_aio_context(BlockDriverState
*bs,
if (s->header.features & QED_F_NEED_CHECK) {
qed_start_need_check_timer(s);
}
+ aio_context_add_drain_ops(new_context,
+ bdrv_qed_drained_begin, bdrv_qed_drained_end,
+ bs);
}
static void coroutine_fn bdrv_qed_co_drain_begin(BlockDriverState *bs)
{
- BDRVQEDState *s = bs->opaque;
-
- /* Fire the timer immediately in order to start doing I/O as soon as the
- * header is flushed.
- */
- if (s->need_check_timer && timer_pending(s->need_check_timer)) {
- qed_cancel_need_check_timer(s);
- qed_need_check_timer_entry(s);
- }
+ bdrv_qed_drained_begin(bs);
}
static void bdrv_qed_init_state(BlockDriverState *bs)
--
2.14.3
- [Qemu-block] [PATCH RFC 0/9] block: Rewrite block drain begin/end, Fam Zheng, 2017/11/29
- [Qemu-block] [PATCH RFC 1/9] block: Remove unused bdrv_requests_pending, Fam Zheng, 2017/11/29
- [Qemu-block] [PATCH RFC 2/9] aio: Add drain begin/end API to AioContext, Fam Zheng, 2017/11/29
- [Qemu-block] [PATCH RFC 3/9] blockjob: Implement AioContext drain ops, Fam Zheng, 2017/11/29
- [Qemu-block] [PATCH RFC 4/9] throttle: Implement AioContext drain ops, Fam Zheng, 2017/11/29
- [Qemu-block] [PATCH RFC 5/9] qed: Implement AioContext drain ops,
Fam Zheng <=
- [Qemu-block] [PATCH RFC 6/9] block: Use aio_context_drained_begin in bdrv_set_aio_context, Fam Zheng, 2017/11/29
- [Qemu-block] [PATCH RFC 7/9] block: Switch to use AIO drained begin/end API, Fam Zheng, 2017/11/29
- [Qemu-block] [PATCH RFC 8/9] block: Drop old drained_{begin, end} callbacks, Fam Zheng, 2017/11/29
- [Qemu-block] [PATCH RFC 9/9] blockjob: Drop unused functions, Fam Zheng, 2017/11/29
- Re: [Qemu-block] [PATCH RFC 0/9] block: Rewrite block drain begin/end, Kevin Wolf, 2017/11/29