diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2017-05-08 16:13:02 +0200 |
---|---|---|
committer | Jeff Cody <jcody@redhat.com> | 2017-05-24 16:38:51 -0400 |
commit | 05b0d8e3b8a1ed1a5840a317ce4f7f4ebe53156f (patch) | |
tree | 94487e194c1c0e31d8035e25b2e598f323e521b8 /blockjob.c | |
parent | 9f086abbe43d29de2409e01d8fb2d68a6102afbc (diff) |
blockjob: introduce block_job_early_fail
Outside blockjob.c, block_job_unref is only used when a block job fails
to start, and block_job_ref is not used at all. The reference counting
thus is pretty well hidden. Introduce a separate function to be used
by block jobs; because block_job_ref and block_job_unref now become
static, move them earlier in blockjob.c.
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Jeff Cody <jcody@redhat.com>
Message-id: 20170508141310.8674-4-pbonzini@redhat.com
Signed-off-by: Jeff Cody <jcody@redhat.com>
Diffstat (limited to 'blockjob.c')
-rw-r--r-- | blockjob.c | 47 |
1 files changed, 28 insertions, 19 deletions
diff --git a/blockjob.c b/blockjob.c index 71187d0c9e..5a722c3635 100644 --- a/blockjob.c +++ b/blockjob.c @@ -106,6 +106,32 @@ BlockJob *block_job_get(const char *id) return NULL; } +static void block_job_ref(BlockJob *job) +{ + ++job->refcnt; +} + +static void block_job_attached_aio_context(AioContext *new_context, + void *opaque); +static void block_job_detach_aio_context(void *opaque); + +static void block_job_unref(BlockJob *job) +{ + if (--job->refcnt == 0) { + BlockDriverState *bs = blk_bs(job->blk); + bs->job = NULL; + block_job_remove_all_bdrv(job); + blk_remove_aio_context_notifier(job->blk, + block_job_attached_aio_context, + block_job_detach_aio_context, job); + blk_unref(job->blk); + error_free(job->blocker); + g_free(job->id); + QLIST_REMOVE(job, job_list); + g_free(job); + } +} + static void block_job_attached_aio_context(AioContext *new_context, void *opaque) { @@ -293,26 +319,9 @@ void block_job_start(BlockJob *job) bdrv_coroutine_enter(blk_bs(job->blk), job->co); } -void block_job_ref(BlockJob *job) -{ - ++job->refcnt; -} - -void block_job_unref(BlockJob *job) +void block_job_early_fail(BlockJob *job) { - if (--job->refcnt == 0) { - BlockDriverState *bs = blk_bs(job->blk); - bs->job = NULL; - block_job_remove_all_bdrv(job); - blk_remove_aio_context_notifier(job->blk, - block_job_attached_aio_context, - block_job_detach_aio_context, job); - blk_unref(job->blk); - error_free(job->blocker); - g_free(job->id); - QLIST_REMOVE(job, job_list); - g_free(job); - } + block_job_unref(job); } static void block_job_completed_single(BlockJob *job) |