diff mbox series

[2/4] blockjob: add block_jobs_info_list()

Message ID 20201119131634.14009-3-vsementsov@virtuozzo.com (mailing list archive)
State New, archived
Headers show
Series Add function to dump block layer for debugging | expand

Commit Message

Vladimir Sementsov-Ogievskiy Nov. 19, 2020, 1:16 p.m. UTC
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 <vsementsov@virtuozzo.com>
---
 include/block/blockjob.h |  7 +++++++
 blockdev.c               | 26 +-------------------------
 blockjob.c               | 29 +++++++++++++++++++++++++++++
 3 files changed, 37 insertions(+), 25 deletions(-)
diff mbox series

Patch

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;
+}