aboutsummaryrefslogtreecommitdiff
path: root/blockdev.c
diff options
context:
space:
mode:
Diffstat (limited to 'blockdev.c')
-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)