[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 08/11] blockjob: group BlockJob transaction func
From: |
John Snow |
Subject: |
Re: [Qemu-devel] [PATCH 08/11] blockjob: group BlockJob transaction functions together |
Date: |
Mon, 24 Apr 2017 19:46:51 -0400 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.0 |
On 04/19/2017 10:42 AM, Paolo Bonzini wrote:
> Yet another pure code movement patch, preparing for the next change.
>
> Signed-off-by: Paolo Bonzini <address@hidden>
Reviewed-by: John Snow <address@hidden>
> ---
> v1->v2: split out of block_job_completed_txn_abort patch [John]
>
> blockjob.c | 128
> ++++++++++++++++++++++++++++++-------------------------------
> 1 file changed, 64 insertions(+), 64 deletions(-)
>
> diff --git a/blockjob.c b/blockjob.c
> index 1756153..5d70d25 100644
> --- a/blockjob.c
> +++ b/blockjob.c
> @@ -91,6 +91,39 @@ BlockJob *block_job_get(const char *id)
> return NULL;
> }
>
> +BlockJobTxn *block_job_txn_new(void)
> +{
> + BlockJobTxn *txn = g_new0(BlockJobTxn, 1);
> + QLIST_INIT(&txn->jobs);
> + txn->refcnt = 1;
> + return txn;
> +}
> +
> +static void block_job_txn_ref(BlockJobTxn *txn)
> +{
> + txn->refcnt++;
> +}
> +
> +void block_job_txn_unref(BlockJobTxn *txn)
> +{
> + if (txn && --txn->refcnt == 0) {
> + g_free(txn);
> + }
> +}
> +
> +void block_job_txn_add_job(BlockJobTxn *txn, BlockJob *job)
> +{
> + if (!txn) {
> + return;
> + }
> +
> + assert(!job->txn);
> + job->txn = txn;
> +
> + QLIST_INSERT_HEAD(&txn->jobs, job, txn_list);
> + block_job_txn_ref(txn);
> +}
> +
> static void block_job_pause(BlockJob *job)
> {
> job->pause_count++;
> @@ -317,6 +350,37 @@ static void block_job_cancel_async(BlockJob *job)
> job->cancelled = true;
> }
>
> +static int block_job_finish_sync(BlockJob *job,
> + void (*finish)(BlockJob *, Error **errp),
> + Error **errp)
> +{
> + Error *local_err = NULL;
> + int ret;
> +
> + assert(blk_bs(job->blk)->job == job);
> +
> + block_job_ref(job);
> +
> + finish(job, &local_err);
> + if (local_err) {
> + error_propagate(errp, local_err);
> + block_job_unref(job);
> + return -EBUSY;
> + }
> + /* block_job_drain calls block_job_enter, and it should be enough to
> + * induce progress until the job completes or moves to the main thread.
> + */
> + while (!job->deferred_to_main_loop && !job->completed) {
> + block_job_drain(job);
> + }
> + while (!job->completed) {
> + aio_poll(qemu_get_aio_context(), true);
> + }
> + ret = (job->cancelled && job->ret == 0) ? -ECANCELED : job->ret;
> + block_job_unref(job);
> + return ret;
> +}
> +
> static void block_job_completed_txn_abort(BlockJob *job)
> {
> AioContext *ctx;
> @@ -440,37 +504,6 @@ void block_job_cancel(BlockJob *job)
> }
> }
>
> -static int block_job_finish_sync(BlockJob *job,
> - void (*finish)(BlockJob *, Error **errp),
> - Error **errp)
> -{
> - Error *local_err = NULL;
> - int ret;
> -
> - assert(blk_bs(job->blk)->job == job);
> -
> - block_job_ref(job);
> -
> - finish(job, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> - block_job_unref(job);
> - return -EBUSY;
> - }
> - /* block_job_drain calls block_job_enter, and it should be enough to
> - * induce progress until the job completes or moves to the main thread.
> - */
> - while (!job->deferred_to_main_loop && !job->completed) {
> - block_job_drain(job);
> - }
> - while (!job->completed) {
> - aio_poll(qemu_get_aio_context(), true);
> - }
> - ret = (job->cancelled && job->ret == 0) ? -ECANCELED : job->ret;
> - block_job_unref(job);
> - return ret;
> -}
> -
> /* A wrapper around block_job_cancel() taking an Error ** parameter so it
> may be
> * used with block_job_finish_sync() without the need for (rather nasty)
> * function pointer casts there. */
> @@ -883,36 +916,3 @@ void block_job_defer_to_main_loop(BlockJob *job,
> aio_bh_schedule_oneshot(qemu_get_aio_context(),
> block_job_defer_to_main_loop_bh, data);
> }
> -
> -BlockJobTxn *block_job_txn_new(void)
> -{
> - BlockJobTxn *txn = g_new0(BlockJobTxn, 1);
> - QLIST_INIT(&txn->jobs);
> - txn->refcnt = 1;
> - return txn;
> -}
> -
> -static void block_job_txn_ref(BlockJobTxn *txn)
> -{
> - txn->refcnt++;
> -}
> -
> -void block_job_txn_unref(BlockJobTxn *txn)
> -{
> - if (txn && --txn->refcnt == 0) {
> - g_free(txn);
> - }
> -}
> -
> -void block_job_txn_add_job(BlockJobTxn *txn, BlockJob *job)
> -{
> - if (!txn) {
> - return;
> - }
> -
> - assert(!job->txn);
> - job->txn = txn;
> -
> - QLIST_INSERT_HEAD(&txn->jobs, job, txn_list);
> - block_job_txn_ref(txn);
> -}
>
- [Qemu-devel] [PATCH 02/11] blockjob: remove iostatus_reset callback, (continued)
- [Qemu-devel] [PATCH 03/11] blockjob: introduce block_job_early_fail, Paolo Bonzini, 2017/04/19
- [Qemu-devel] [PATCH 04/11] blockjob: introduce block_job_pause/resume_all, Paolo Bonzini, 2017/04/19
- [Qemu-devel] [PATCH 08/11] blockjob: group BlockJob transaction functions together, Paolo Bonzini, 2017/04/19
- Re: [Qemu-devel] [PATCH 08/11] blockjob: group BlockJob transaction functions together,
John Snow <=
- [Qemu-devel] [PATCH 09/11] blockjob: strengthen a bit test-blockjob-txn, Paolo Bonzini, 2017/04/19
- [Qemu-devel] [PATCH 07/11] blockjob: introduce block_job_cancel_async, check iostatus invariants, Paolo Bonzini, 2017/04/19
- [Qemu-devel] [PATCH 10/11] blockjob: reorganize block_job_completed_txn_abort, Paolo Bonzini, 2017/04/19
- [Qemu-devel] [PATCH 06/11] blockjob: move iostatus reset inside block_job_user_resume, Paolo Bonzini, 2017/04/19
- [Qemu-devel] [PATCH 11/11] blockjob: use deferred_to_main_loop to indicate the coroutine has ended, Paolo Bonzini, 2017/04/19
- [Qemu-devel] [PATCH 05/11] blockjob: separate monitor and blockjob APIs, Paolo Bonzini, 2017/04/19