summary refs log tree commit diff stats
path: root/block/commit.c
diff options
context:
space:
mode:
authorJohn Snow <jsnow@redhat.com>2016-11-08 01:50:36 -0500
committerJeff Cody <jcody@redhat.com>2016-11-14 22:47:34 -0500
commita7815a764c40c9dcf204f666c2d90248095376a8 (patch)
tree6218069fef5d588f66950b1fd11cbfa87b043aca /block/commit.c
parente8a40bf71d606f9f87866fb2461eaed52814b38e (diff)
downloadfocaccia-qemu-a7815a764c40c9dcf204f666c2d90248095376a8.tar.gz
focaccia-qemu-a7815a764c40c9dcf204f666c2d90248095376a8.zip
blockjob: add .start field
Add an explicit start field to specify the entrypoint. We already have
ownership of the coroutine itself AND managing the lifetime of the
coroutine, let's take control of creation of the coroutine, too.

This will allow us to delay creation of the actual coroutine until we
know we'll actually start a BlockJob in block_job_start. This avoids
the sticky question of how to "un-create" a Coroutine that hasn't been
started yet.

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Message-id: 1478587839-9834-4-git-send-email-jsnow@redhat.com
Signed-off-by: Jeff Cody <jcody@redhat.com>
Diffstat (limited to 'block/commit.c')
-rw-r--r--block/commit.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/block/commit.c b/block/commit.c
index e1eda8908b..20d27e27a8 100644
--- a/block/commit.c
+++ b/block/commit.c
@@ -205,6 +205,7 @@ static const BlockJobDriver commit_job_driver = {
     .instance_size = sizeof(CommitBlockJob),
     .job_type      = BLOCK_JOB_TYPE_COMMIT,
     .set_speed     = commit_set_speed,
+    .start         = commit_run,
 };
 
 void commit_start(const char *job_id, BlockDriverState *bs,
@@ -288,7 +289,7 @@ void commit_start(const char *job_id, BlockDriverState *bs,
     s->backing_file_str = g_strdup(backing_file_str);
 
     s->on_error = on_error;
-    s->common.co = qemu_coroutine_create(commit_run, s);
+    s->common.co = qemu_coroutine_create(s->common.driver->start, s);
 
     trace_commit_start(bs, base, top, s, s->common.co);
     qemu_coroutine_enter(s->common.co);