[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL v3 22/35] blockjob: Pause job on draining any job BDS
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PULL v3 22/35] blockjob: Pause job on draining any job BDS |
Date: |
Fri, 22 Dec 2017 16:18:33 +0100 |
Block jobs already paused themselves when their main BlockBackend
entered a drained section. This is not good enough: We also want to
pause a block job and may not submit new requests if, for example, the
mirror target node should be drained.
This implements .drained_begin/end callbacks in child_job in order to
consider all block nodes related to the job, and removes the
BlockBackend callbacks which are unnecessary now because the root of the
job main BlockBackend is always referenced with a child_job, too.
Signed-off-by: Kevin Wolf <address@hidden>
---
blockjob.c | 22 +++++++++-------------
1 file changed, 9 insertions(+), 13 deletions(-)
diff --git a/blockjob.c b/blockjob.c
index 6173e4728c..f5cea84e73 100644
--- a/blockjob.c
+++ b/blockjob.c
@@ -234,26 +234,23 @@ static char *child_job_get_parent_desc(BdrvChild *c)
job->id);
}
-static const BdrvChildRole child_job = {
- .get_parent_desc = child_job_get_parent_desc,
- .stay_at_node = true,
-};
-
-static void block_job_drained_begin(void *opaque)
+static void child_job_drained_begin(BdrvChild *c)
{
- BlockJob *job = opaque;
+ BlockJob *job = c->opaque;
block_job_pause(job);
}
-static void block_job_drained_end(void *opaque)
+static void child_job_drained_end(BdrvChild *c)
{
- BlockJob *job = opaque;
+ BlockJob *job = c->opaque;
block_job_resume(job);
}
-static const BlockDevOps block_job_dev_ops = {
- .drained_begin = block_job_drained_begin,
- .drained_end = block_job_drained_end,
+static const BdrvChildRole child_job = {
+ .get_parent_desc = child_job_get_parent_desc,
+ .drained_begin = child_job_drained_begin,
+ .drained_end = child_job_drained_end,
+ .stay_at_node = true,
};
void block_job_remove_all_bdrv(BlockJob *job)
@@ -715,7 +712,6 @@ void *block_job_create(const char *job_id, const
BlockJobDriver *driver,
block_job_add_bdrv(job, "main node", bs, 0, BLK_PERM_ALL, &error_abort);
bs->job = job;
- blk_set_dev_ops(blk, &block_job_dev_ops, job);
bdrv_op_unblock(bs, BLOCK_OP_TYPE_DATAPLANE, job->blocker);
QLIST_INSERT_HEAD(&block_jobs, job, job_list);
--
2.13.6
- [Qemu-devel] [PULL v3 13/35] block: Open backing image in force share mode for size probe, (continued)
- [Qemu-devel] [PULL v3 13/35] block: Open backing image in force share mode for size probe, Kevin Wolf, 2017/12/22
- [Qemu-devel] [PULL v3 11/35] block: Document that x-blockdev-change breaks quorum children list, Kevin Wolf, 2017/12/22
- [Qemu-devel] [PULL v3 14/35] block: Remove the obsolete -drive boot=on|off parameter, Kevin Wolf, 2017/12/22
- [Qemu-devel] [PULL v3 15/35] block: Remove the deprecated -hdachs option, Kevin Wolf, 2017/12/22
- [Qemu-devel] [PULL v3 12/35] nvme: Add tracing, Kevin Wolf, 2017/12/22
- [Qemu-devel] [PULL v3 19/35] block: Make bdrv_drain() driver callbacks non-recursive, Kevin Wolf, 2017/12/22
- [Qemu-devel] [PULL v3 16/35] block: Mention -drive cyls/heads/secs/trans/serial/addr in deprecation chapter, Kevin Wolf, 2017/12/22
- [Qemu-devel] [PULL v3 17/35] block: Remove unused bdrv_requests_pending, Kevin Wolf, 2017/12/22
- [Qemu-devel] [PULL v3 24/35] block: Don't block_job_pause_all() in bdrv_drain_all(), Kevin Wolf, 2017/12/22
- [Qemu-devel] [PULL v3 25/35] block: Nested drain_end must still call callbacks, Kevin Wolf, 2017/12/22
- [Qemu-devel] [PULL v3 22/35] blockjob: Pause job on draining any job BDS,
Kevin Wolf <=
- [Qemu-devel] [PULL v3 23/35] test-bdrv-drain: Test drain vs. block jobs, Kevin Wolf, 2017/12/22
- [Qemu-devel] [PULL v3 21/35] test-bdrv-drain: Test bs->quiesce_counter, Kevin Wolf, 2017/12/22
- [Qemu-devel] [PULL v3 20/35] test-bdrv-drain: Test callback for bdrv_drain, Kevin Wolf, 2017/12/22
- [Qemu-devel] [PULL v3 18/35] block: Assert drain_all is only called from main AioContext, Kevin Wolf, 2017/12/22
- [Qemu-devel] [PULL v3 26/35] test-bdrv-drain: Test nested drain sections, Kevin Wolf, 2017/12/22
- [Qemu-devel] [PULL v3 27/35] block: Don't notify parents in drain call chain, Kevin Wolf, 2017/12/22
- [Qemu-devel] [PULL v3 28/35] block: Add bdrv_subtree_drained_begin/end(), Kevin Wolf, 2017/12/22
- [Qemu-devel] [PULL v3 30/35] test-bdrv-drain: Test behaviour in coroutine context, Kevin Wolf, 2017/12/22
- [Qemu-devel] [PULL v3 29/35] test-bdrv-drain: Tests for bdrv_subtree_drain, Kevin Wolf, 2017/12/22
- [Qemu-devel] [PULL v3 31/35] test-bdrv-drain: Recursive draining with multiple parents, Kevin Wolf, 2017/12/22