Commit f67432a2 authored by John Snow's avatar John Snow Committed by Max Reitz
Browse files

jobs: change start callback to run callback



Presently we codify the entry point for a job as the "start" callback,
but a more apt name would be "run" to clarify the idea that when this
function returns we consider the job to have "finished," except for
any cleanup which occurs in separate callbacks later.

As part of this clarification, change the signature to include an error
object and a return code. The error ptr is not yet used, and the return
code while captured, will be overwritten by actions in the job_completed
function.

Signed-off-by: default avatarJohn Snow <jsnow@redhat.com>
Reviewed-by: default avatarMax Reitz <mreitz@redhat.com>
Message-id: 20180830015734.19765-2-jsnow@redhat.com
Reviewed-by: default avatarJeff Cody <jcody@redhat.com>
Signed-off-by: default avatarMax Reitz <mreitz@redhat.com>
parent 7b43db3c
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -480,9 +480,9 @@ static void backup_incremental_init_copy_bitmap(BackupBlockJob *job)
    bdrv_dirty_iter_free(dbi);
}

static void coroutine_fn backup_run(void *opaque)
static int coroutine_fn backup_run(Job *opaque_job, Error **errp)
{
    BackupBlockJob *job = opaque;
    BackupBlockJob *job = container_of(opaque_job, BackupBlockJob, common.job);
    BackupCompleteData *data;
    BlockDriverState *bs = blk_bs(job->common.blk);
    int64_t offset, nb_clusters;
@@ -587,6 +587,7 @@ static void coroutine_fn backup_run(void *opaque)
    data = g_malloc(sizeof(*data));
    data->ret = ret;
    job_defer_to_main_loop(&job->common.job, backup_complete, data);
    return ret;
}

static const BlockJobDriver backup_job_driver = {
@@ -596,7 +597,7 @@ static const BlockJobDriver backup_job_driver = {
        .free                   = block_job_free,
        .user_resume            = block_job_user_resume,
        .drain                  = block_job_drain,
        .start                  = backup_run,
        .run                    = backup_run,
        .commit                 = backup_commit,
        .abort                  = backup_abort,
        .clean                  = backup_clean,
+4 −3
Original line number Diff line number Diff line
@@ -134,9 +134,9 @@ static void commit_complete(Job *job, void *opaque)
    bdrv_unref(top);
}

static void coroutine_fn commit_run(void *opaque)
static int coroutine_fn commit_run(Job *job, Error **errp)
{
    CommitBlockJob *s = opaque;
    CommitBlockJob *s = container_of(job, CommitBlockJob, common.job);
    CommitCompleteData *data;
    int64_t offset;
    uint64_t delay_ns = 0;
@@ -213,6 +213,7 @@ out:
    data = g_malloc(sizeof(*data));
    data->ret = ret;
    job_defer_to_main_loop(&s->common.job, commit_complete, data);
    return ret;
}

static const BlockJobDriver commit_job_driver = {
@@ -222,7 +223,7 @@ static const BlockJobDriver commit_job_driver = {
        .free          = block_job_free,
        .user_resume   = block_job_user_resume,
        .drain         = block_job_drain,
        .start         = commit_run,
        .run           = commit_run,
    },
};

+5 −3
Original line number Diff line number Diff line
@@ -45,9 +45,9 @@ static void blockdev_create_complete(Job *job, void *opaque)
    job_completed(job, s->ret, s->err);
}

static void coroutine_fn blockdev_create_run(void *opaque)
static int coroutine_fn blockdev_create_run(Job *job, Error **errp)
{
    BlockdevCreateJob *s = opaque;
    BlockdevCreateJob *s = container_of(job, BlockdevCreateJob, common);

    job_progress_set_remaining(&s->common, 1);
    s->ret = s->drv->bdrv_co_create(s->opts, &s->err);
@@ -55,12 +55,14 @@ static void coroutine_fn blockdev_create_run(void *opaque)

    qapi_free_BlockdevCreateOptions(s->opts);
    job_defer_to_main_loop(&s->common, blockdev_create_complete, NULL);

    return s->ret;
}

static const JobDriver blockdev_create_job_driver = {
    .instance_size = sizeof(BlockdevCreateJob),
    .job_type      = JOB_TYPE_CREATE,
    .start         = blockdev_create_run,
    .run           = blockdev_create_run,
};

void qmp_blockdev_create(const char *job_id, BlockdevCreateOptions *options,
+6 −4
Original line number Diff line number Diff line
@@ -812,9 +812,9 @@ static int mirror_flush(MirrorBlockJob *s)
    return ret;
}

static void coroutine_fn mirror_run(void *opaque)
static int coroutine_fn mirror_run(Job *job, Error **errp)
{
    MirrorBlockJob *s = opaque;
    MirrorBlockJob *s = container_of(job, MirrorBlockJob, common.job);
    MirrorExitData *data;
    BlockDriverState *bs = s->mirror_top_bs->backing->bs;
    BlockDriverState *target_bs = blk_bs(s->target);
@@ -1041,7 +1041,9 @@ immediate_exit:
    if (need_drain) {
        bdrv_drained_begin(bs);
    }

    job_defer_to_main_loop(&s->common.job, mirror_exit, data);
    return ret;
}

static void mirror_complete(Job *job, Error **errp)
@@ -1138,7 +1140,7 @@ static const BlockJobDriver mirror_job_driver = {
        .free                   = block_job_free,
        .user_resume            = block_job_user_resume,
        .drain                  = block_job_drain,
        .start                  = mirror_run,
        .run                    = mirror_run,
        .pause                  = mirror_pause,
        .complete               = mirror_complete,
    },
@@ -1154,7 +1156,7 @@ static const BlockJobDriver commit_active_job_driver = {
        .free                   = block_job_free,
        .user_resume            = block_job_user_resume,
        .drain                  = block_job_drain,
        .start                  = mirror_run,
        .run                    = mirror_run,
        .pause                  = mirror_pause,
        .complete               = mirror_complete,
    },
+4 −3
Original line number Diff line number Diff line
@@ -97,9 +97,9 @@ out:
    g_free(data);
}

static void coroutine_fn stream_run(void *opaque)
static int coroutine_fn stream_run(Job *job, Error **errp)
{
    StreamBlockJob *s = opaque;
    StreamBlockJob *s = container_of(job, StreamBlockJob, common.job);
    StreamCompleteData *data;
    BlockBackend *blk = s->common.blk;
    BlockDriverState *bs = blk_bs(blk);
@@ -206,6 +206,7 @@ out:
    data = g_malloc(sizeof(*data));
    data->ret = ret;
    job_defer_to_main_loop(&s->common.job, stream_complete, data);
    return ret;
}

static const BlockJobDriver stream_job_driver = {
@@ -213,7 +214,7 @@ static const BlockJobDriver stream_job_driver = {
        .instance_size = sizeof(StreamBlockJob),
        .job_type      = JOB_TYPE_STREAM,
        .free          = block_job_free,
        .start         = stream_run,
        .run           = stream_run,
        .user_resume   = block_job_user_resume,
        .drain         = block_job_drain,
    },
Loading