Commit 198c49cc authored by Kevin Wolf's avatar Kevin Wolf
Browse files

job: Add job_yield()



This moves block_job_yield() to the Job layer.

Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
Reviewed-by: default avatarMax Reitz <mreitz@redhat.com>
parent b3b5299d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -444,7 +444,7 @@ static void coroutine_fn backup_run(void *opaque)
        while (!job_is_cancelled(&job->common.job)) {
            /* Yield until the job is cancelled.  We just let our before_write
             * notify callback service CoW requests. */
            block_job_yield(&job->common);
            job_yield(&job->common.job);
        }
    } else if (job->sync_mode == MIRROR_SYNC_MODE_INCREMENTAL) {
        ret = backup_run_incremental(job);
+1 −1
Original line number Diff line number Diff line
@@ -731,7 +731,7 @@ static void coroutine_fn mirror_run(void *opaque)
        block_job_event_ready(&s->common);
        s->synced = true;
        while (!job_is_cancelled(&s->common.job) && !s->should_complete) {
            block_job_yield(&s->common);
            job_yield(&s->common.job);
        }
        s->common.job.cancelled = false;
        goto immediate_exit;
+0 −16
Original line number Diff line number Diff line
@@ -431,22 +431,6 @@ void *block_job_create(const char *job_id, const BlockJobDriver *driver,
    return job;
}

void block_job_yield(BlockJob *job)
{
    assert(job->job.busy);

    /* Check cancellation *before* setting busy = false, too!  */
    if (job_is_cancelled(&job->job)) {
        return;
    }

    if (!job_should_pause(&job->job)) {
        job_do_yield(&job->job, -1);
    }

    job_pause_point(&job->job);
}

void block_job_iostatus_reset(BlockJob *job)
{
    if (job->iostatus == BLOCK_DEVICE_IO_STATUS_OK) {
+0 −8
Original line number Diff line number Diff line
@@ -107,14 +107,6 @@ void block_job_user_resume(Job *job);
 */
void block_job_drain(Job *job);

/**
 * block_job_yield:
 * @job: The job that calls the function.
 *
 * Yield the block job coroutine.
 */
void block_job_yield(BlockJob *job);

/**
 * block_job_ratelimit_get_delay:
 *
+7 −2
Original line number Diff line number Diff line
@@ -337,6 +337,13 @@ void job_enter(Job *job);
 */
void coroutine_fn job_pause_point(Job *job);

/**
 * @job: The job that calls the function.
 *
 * Yield the job coroutine.
 */
void job_yield(Job *job);

/**
 * @job: The job that calls the function.
 * @ns: How many nanoseconds to stop for.
@@ -508,8 +515,6 @@ int job_finish_sync(Job *job, void (*finish)(Job *, Error **errp), Error **errp)

/* TODO To be removed from the public interface */
void job_state_transition(Job *job, JobStatus s1);
void coroutine_fn job_do_yield(Job *job, uint64_t ns);
bool job_should_pause(Job *job);
void job_do_dismiss(Job *job);

#endif
Loading