static int block_job_finish_sync(BlockJob *job,

                                 void (*finish)(BlockJob *, Error **errp),

                                 Error **errp)

{

    BlockDriverState *bs = job->bs;

    Error *local_err = NULL;

    int ret;



    assert(bs->job == job);



    block_job_ref(job);

    finish(job, &local_err);

    if (local_err) {

        error_propagate(errp, local_err);

        block_job_unref(job);

        return -EBUSY;

    }

    while (!job->completed) {

        aio_poll(bdrv_get_aio_context(bs), true);

    }

    ret = (job->cancelled && job->ret == 0) ? -ECANCELED : job->ret;

    block_job_unref(job);

    return ret;

}

static int block_job_finish_sync(BlockJob *job,

                                 void (*finish)(BlockJob *, Error **errp),

                                 Error **errp)

{

    BlockDriverState *bs = job->bs;

    Error *local_err = NULL;

    int ret;



    assert(bs->job == job);



    block_job_ref(job);

    finish(job, &local_err);

    if (local_err) {

        error_propagate(errp, local_err);

        block_job_unref(job);

        return -EBUSY;

    }

    while (!job->completed) {

        aio_poll(bdrv_get_aio_context(bs), true);

    }

    ret = (job->cancelled && job->ret == 0) ? -ECANCELED : job->ret;

    block_job_unref(job);

    return ret;

}

VAR_2staticVAR_2 VAR_2intVAR_2 VAR_2block_job_finish_syncVAR_2(VAR_2BlockJobVAR_2 *VAR_2VAR_0VAR_2,

                                 VAR_2voidVAR_2 (*VAR_2VAR_1VAR_2)(VAR_2BlockJobVAR_2 *, VAR_2ErrorVAR_2 **VAR_2errpVAR_2),

                                 VAR_2ErrorVAR_2 **VAR_2errpVAR_2)

{

    VAR_2BlockDriverStateVAR_2 *VAR_2bsVAR_2 = VAR_2VAR_0VAR_2->VAR_2bsVAR_2;

    VAR_2ErrorVAR_2 *VAR_2local_errVAR_2 = VAR_2NULLVAR_2;

    VAR_2intVAR_2 VAR_2retVAR_2;



    VAR_2assertVAR_2(VAR_2bsVAR_2->VAR_2VAR_0VAR_2 == VAR_2VAR_0VAR_2);



    VAR_2block_job_refVAR_2(VAR_2VAR_0VAR_2);

    VAR_2VAR_1VAR_2(VAR_2VAR_0VAR_2, &VAR_2local_errVAR_2);

    VAR_2ifVAR_2 (VAR_2local_errVAR_2) {

        VAR_2error_propagateVAR_2(VAR_2errpVAR_2, VAR_2local_errVAR_2);

        VAR_2block_job_unrefVAR_2(VAR_2VAR_0VAR_2);

        VAR_2returnVAR_2 -VAR_2EBUSYVAR_2;

    }

    VAR_2whileVAR_2 (!VAR_2VAR_0VAR_2->VAR_2completedVAR_2) {

        VAR_2aio_pollVAR_2(VAR_2bdrv_get_aio_contextVAR_2(VAR_2bsVAR_2), VAR_2trueVAR_2);

    }

    VAR_2retVAR_2 = (VAR_2VAR_0VAR_2->VAR_2cancelledVAR_2 && VAR_2VAR_0VAR_2->VAR_2retVAR_2 == VAR_20VAR_2) ? -VAR_2ECANCELEDVAR_2 : VAR_2VAR_0VAR_2->VAR_2retVAR_2;

    VAR_2block_job_unrefVAR_2(VAR_2VAR_0VAR_2);

    VAR_2returnVAR_2 VAR_2retVAR_2;

}

VAR_2staticVAR_2 VAR_2intVAR_2 VAR_2block_job_finish_syncVAR_2(VAR_2BlockJobVAR_2 *VAR_2VAR_0VAR_2,
VAR_2voidVAR_2 (*VAR_2VAR_1VAR_2)(VAR_2BlockJobVAR_2 *, VAR_2ErrorVAR_2 **VAR_2errpVAR_2),
VAR_2ErrorVAR_2 **VAR_2errpVAR_2)
{ VAR_2BlockDriverStateVAR_2 *VAR_2bsVAR_2 = VAR_2VAR_0VAR_2->VAR_2bsVAR_2; VAR_2ErrorVAR_2 *VAR_2local_errVAR_2 = VAR_2NULLVAR_2; VAR_2intVAR_2 VAR_2retVAR_2; VAR_2assertVAR_2(VAR_2bsVAR_2->VAR_2VAR_0VAR_2 == VAR_2VAR_0VAR_2); VAR_2block_job_refVAR_2(VAR_2VAR_0VAR_2); VAR_2VAR_1VAR_2(VAR_2VAR_0VAR_2, &VAR_2local_errVAR_2); VAR_2ifVAR_2 (VAR_2local_errVAR_2) { VAR_2error_propagateVAR_2(VAR_2errpVAR_2, VAR_2local_errVAR_2); VAR_2block_job_unrefVAR_2(VAR_2VAR_0VAR_2); VAR_2returnVAR_2 -VAR_2EBUSYVAR_2; } VAR_2whileVAR_2 (!VAR_2VAR_0VAR_2->VAR_2completedVAR_2) { VAR_2aio_pollVAR_2(VAR_2bdrv_get_aio_contextVAR_2(VAR_2bsVAR_2), VAR_2trueVAR_2); } VAR_2retVAR_2 = (VAR_2VAR_0VAR_2->VAR_2cancelledVAR_2 && VAR_2VAR_0VAR_2->VAR_2retVAR_2 == VAR_20VAR_2) ? -VAR_2ECANCELEDVAR_2 : VAR_2VAR_0VAR_2->VAR_2retVAR_2; VAR_2block_job_unrefVAR_2(VAR_2VAR_0VAR_2); VAR_2returnVAR_2 VAR_2retVAR_2; }