Move qmp_query_block_jobs() functionality to blockjob.c. We'll need it in block.c which is not always compiled together with blockdev.c
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> --- include/block/blockjob.h | 7 +++++++ blockdev.c | 26 +------------------------- blockjob.c | 29 +++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 25 deletions(-) diff --git a/include/block/blockjob.h b/include/block/blockjob.h index 35faa3aa26..2e66d529e2 100644 --- a/include/block/blockjob.h +++ b/include/block/blockjob.h @@ -173,4 +173,11 @@ bool block_job_is_internal(BlockJob *job); */ const BlockJobDriver *block_job_driver(BlockJob *job); +/** + * block_jobs_info_list: + * + * Returns the list of jobs info. + */ +BlockJobInfoList *block_jobs_info_list(Error **errp); + #endif diff --git a/blockdev.c b/blockdev.c index 6f103e5ce7..b5f11c524b 100644 --- a/blockdev.c +++ b/blockdev.c @@ -3670,31 +3670,7 @@ void qmp_x_blockdev_change(const char *parent, bool has_child, BlockJobInfoList *qmp_query_block_jobs(Error **errp) { - BlockJobInfoList *head = NULL, **p_next = &head; - BlockJob *job; - - for (job = block_job_next(NULL); job; job = block_job_next(job)) { - BlockJobInfoList *elem; - AioContext *aio_context; - - if (block_job_is_internal(job)) { - continue; - } - elem = g_new0(BlockJobInfoList, 1); - aio_context = blk_get_aio_context(job->blk); - aio_context_acquire(aio_context); - elem->value = block_job_query(job, errp); - aio_context_release(aio_context); - if (!elem->value) { - g_free(elem); - qapi_free_BlockJobInfoList(head); - return NULL; - } - *p_next = elem; - p_next = &elem->next; - } - - return head; + return block_jobs_info_list(errp); } void qmp_x_blockdev_set_iothread(const char *node_name, StrOrNull *iothread, diff --git a/blockjob.c b/blockjob.c index 98ac8af982..9d0bed01c2 100644 --- a/blockjob.c +++ b/blockjob.c @@ -515,3 +515,32 @@ BlockErrorAction block_job_error_action(BlockJob *job, BlockdevOnError on_err, } return action; } + +BlockJobInfoList *block_jobs_info_list(Error **errp) +{ + BlockJobInfoList *head = NULL, **p_next = &head; + BlockJob *job; + + for (job = block_job_next(NULL); job; job = block_job_next(job)) { + BlockJobInfoList *elem; + AioContext *aio_context; + + if (block_job_is_internal(job)) { + continue; + } + elem = g_new0(BlockJobInfoList, 1); + aio_context = blk_get_aio_context(job->blk); + aio_context_acquire(aio_context); + elem->value = block_job_query(job, errp); + aio_context_release(aio_context); + if (!elem->value) { + g_free(elem); + qapi_free_BlockJobInfoList(head); + return NULL; + } + *p_next = elem; + p_next = &elem->next; + } + + return head; +} -- 2.21.3