summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--blockdev.c40
1 files changed, 13 insertions, 27 deletions
diff --git a/blockdev.c b/blockdev.c
index 0f8065c4a5..e649521e0c 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -3704,42 +3704,28 @@ void qmp_blockdev_mirror(const char *device, const char *target,
     aio_context_release(aio_context);
 }
 
-/* Get the block job for a given device name and acquire its AioContext */
-static BlockJob *find_block_job(const char *device, AioContext **aio_context,
+/* Get a block job using its ID and acquire its AioContext */
+static BlockJob *find_block_job(const char *id, AioContext **aio_context,
                                 Error **errp)
 {
-    BlockBackend *blk;
-    BlockDriverState *bs;
+    BlockJob *job;
 
-    *aio_context = NULL;
+    assert(id != NULL);
 
-    blk = blk_by_name(device);
-    if (!blk) {
-        goto notfound;
-    }
-
-    *aio_context = blk_get_aio_context(blk);
-    aio_context_acquire(*aio_context);
+    *aio_context = NULL;
 
-    if (!blk_is_available(blk)) {
-        goto notfound;
-    }
-    bs = blk_bs(blk);
+    job = block_job_get(id);
 
-    if (!bs->job) {
-        goto notfound;
+    if (!job) {
+        error_set(errp, ERROR_CLASS_DEVICE_NOT_ACTIVE,
+                  "Block job '%s' not found", id);
+        return NULL;
     }
 
-    return bs->job;
+    *aio_context = blk_get_aio_context(job->blk);
+    aio_context_acquire(*aio_context);
 
-notfound:
-    error_set(errp, ERROR_CLASS_DEVICE_NOT_ACTIVE,
-              "No active block job on device '%s'", device);
-    if (*aio_context) {
-        aio_context_release(*aio_context);
-        *aio_context = NULL;
-    }
-    return NULL;
+    return job;
 }
 
 void qmp_block_job_set_speed(const char *device, int64_t speed, Error **errp)