[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL v2 04/34] block: Use block_job_get() in find_block_jo
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PULL v2 04/34] block: Use block_job_get() in find_block_job() |
Date: |
Wed, 13 Jul 2016 14:50:11 +0200 |
From: Alberto Garcia <address@hidden>
find_block_job() looks for a block backend with a specified name,
checks whether it has a block job and acquires its AioContext.
We want to identify jobs by their ID and not by the block backend
they're attached to, so this patch ignores the backends altogether and
gets the job directly. Apart from making the code simpler, this will
allow us to find block jobs once they start having user-specified IDs.
To ensure backward compatibility we keep ERROR_CLASS_DEVICE_NOT_ACTIVE
as the error class if the job doesn't exist. In subsequent patches
we'll also need to keep the device name as the default job ID if the
user doesn't specify a different one.
Signed-off-by: Alberto Garcia <address@hidden>
Reviewed-by: Max Reitz <address@hidden>
Reviewed-by: Kevin Wolf <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
blockdev.c | 40 +++++++++++++---------------------------
1 file changed, 13 insertions(+), 27 deletions(-)
diff --git a/blockdev.c b/blockdev.c
index 0f8065c..e649521 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)
--
1.8.3.1
- [Qemu-devel] [PULL v2 00/34] Block layer patches, Kevin Wolf, 2016/07/13
- [Qemu-devel] [PULL v2 03/34] blockjob: Add block_job_get(), Kevin Wolf, 2016/07/13
- [Qemu-devel] [PULL v2 02/34] blockjob: Update description of the 'id' field, Kevin Wolf, 2016/07/13
- [Qemu-devel] [PULL v2 04/34] block: Use block_job_get() in find_block_job(),
Kevin Wolf <=
- [Qemu-devel] [PULL v2 01/34] stream: Fix prototype of stream_start(), Kevin Wolf, 2016/07/13
- [Qemu-devel] [PULL v2 06/34] mirror: Add 'job-id' parameter to 'blockdev-mirror' and 'drive-mirror', Kevin Wolf, 2016/07/13
- [Qemu-devel] [PULL v2 07/34] backup: Add 'job-id' parameter to 'blockdev-backup' and 'drive-backup', Kevin Wolf, 2016/07/13
- [Qemu-devel] [PULL v2 08/34] stream: Add 'job-id' parameter to 'block-stream', Kevin Wolf, 2016/07/13
- [Qemu-devel] [PULL v2 10/34] qemu-img: Set the ID of the block job in img_commit(), Kevin Wolf, 2016/07/13
- [Qemu-devel] [PULL v2 05/34] blockjob: Add 'job_id' parameter to block_job_create(), Kevin Wolf, 2016/07/13
- [Qemu-devel] [PULL v2 13/34] raw-posix: Use qemu_dup, Kevin Wolf, 2016/07/13
- [Qemu-devel] [PULL v2 11/34] blockjob: Update description of the 'device' field in the QMP API, Kevin Wolf, 2016/07/13
- [Qemu-devel] [PULL v2 12/34] osdep: Introduce qemu_dup, Kevin Wolf, 2016/07/13