Hello all, Block jobs are currently identified by the name of the block backend of the BDS where the job was started.
This series adds a new 'id' field that is specific to the block job and guaranteed to be unique and always present. The patches can be summarized as follows: - 1: Fix the prototype of stream_start(), that is going to be touched by a later patch in the series. - 2-5: Split BlockJob's 'id' field into 'id' and 'device' and adjust the internal APIs to allow using the job ID. - 6-9: Add parameters to allow setting the job ID to all QMP commands that create block jobs (block-stream, block-commit, ...) - 10-14: Add parameters to allow using the job ID to all QMP command that manipulate block jobs (cancel, pause, complete, ...). - 15: Expose the ID field in BlockJobInfo and all BLOCK_JOB_* events. Things to do: - Add new tests specific to job IDs. - Add job ID support to HMP commands. Berto v2: - Rebased on top of the current master - Patch 2 - Now that job->id no longer holds the device name, replace "The active block job for device '%s' cannot be completed" with "The active block job '%s' cannot be completed" in mirror_complete() and block_job_complete(). - Patch 4 - Keep using ERROR_CLASS_DEVICE_NOT_ACTIVE in find_block_job() and change error path. [Max] - Patch 6 - Fix merge conflicts after 274fcce. - Patch 9 - Fix subject in commit message [Max] - Patch 15 - Update iotests 109 and 156 [Max] v1: https://lists.gnu.org/archive/html/qemu-devel/2016-06/msg02438.html - Initial release git backport-diff against v1: Key: [----] : patches are identical [####] : number of functional differences between upstream/downstream patch [down] : patch is downstream-only The flags [FC] indicate (F)unctional and (C)ontextual differences, respectively 001/15:[----] [--] 'stream: Fix prototype of stream_start()' 002/15:[0009] [FC] 'blockjob: Decouple the ID from the device name in the BlockJob struct' 003/15:[----] [-C] 'blockjob: Add block_job_get()' 004/15:[0031] [FC] 'block: Simplify find_block_job() and make it accept a job ID' 005/15:[----] [-C] 'blockjob: Add 'job_id' parameter to block_job_create()' 006/15:[0003] [FC] 'mirror: Add 'job-id' parameter to 'blockdev-mirror' and 'drive-mirror'' 007/15:[----] [-C] 'backup: Add 'job-id' parameter to 'blockdev-backup' and 'drive-backup'' 008/15:[----] [--] 'stream: Add 'job-id' parameter to 'block-stream'' 009/15:[down] 'commit: Add 'job-id' parameter to 'block-commit'' 010/15:[----] [--] 'blockjob: Add 'id' parameter to 'block-job-set-speed'' 011/15:[----] [--] 'blockjob: Add 'id' parameter to 'block-job-cancel'' 012/15:[----] [--] 'blockjob: Add 'id' parameter to 'block-job-pause'' 013/15:[----] [--] 'blockjob: Add 'id' parameter to 'block-job-resume'' 014/15:[----] [--] 'blockjob: Add 'id' parameter to 'block-job-complete'' 015/15:[0095] [FC] 'blockjob: Add 'id' field to 'BlockJobInfo' and all BLOCK_JOB_* events' Alberto Garcia (15): stream: Fix prototype of stream_start() blockjob: Decouple the ID from the device name in the BlockJob struct blockjob: Add block_job_get() block: Simplify find_block_job() and make it accept a job ID blockjob: Add 'job_id' parameter to block_job_create() mirror: Add 'job-id' parameter to 'blockdev-mirror' and 'drive-mirror' backup: Add 'job-id' parameter to 'blockdev-backup' and 'drive-backup' stream: Add 'job-id' parameter to 'block-stream' commit: Add 'job-id' parameter to 'block-commit' blockjob: Add 'id' parameter to 'block-job-set-speed' blockjob: Add 'id' parameter to 'block-job-cancel' blockjob: Add 'id' parameter to 'block-job-pause' blockjob: Add 'id' parameter to 'block-job-resume' blockjob: Add 'id' parameter to 'block-job-complete' blockjob: Add 'id' field to 'BlockJobInfo' and all BLOCK_JOB_* events block/backup.c | 9 +-- block/commit.c | 7 +- block/mirror.c | 22 +++--- block/stream.c | 12 ++-- blockdev.c | 175 +++++++++++++++++++++++++++------------------ blockjob.c | 46 ++++++++++-- docs/qmp-events.txt | 4 ++ hmp.c | 16 ++--- include/block/block_int.h | 47 +++++++----- include/block/blockjob.h | 30 ++++++-- include/qapi/qmp/qerror.h | 3 - include/qemu/id.h | 1 + qapi/block-core.json | 91 ++++++++++++++++++----- qemu-img.c | 2 +- qmp-commands.hx | 32 +++++---- tests/qemu-iotests/095 | 2 +- tests/qemu-iotests/095.out | 2 +- tests/qemu-iotests/109 | 2 +- tests/qemu-iotests/109.out | 88 +++++++++++------------ tests/qemu-iotests/124 | 3 +- tests/qemu-iotests/141 | 6 +- tests/qemu-iotests/141.out | 14 ++-- tests/qemu-iotests/144 | 1 + tests/qemu-iotests/144.out | 4 +- tests/qemu-iotests/156 | 1 + tests/qemu-iotests/156.out | 4 +- tests/test-blockjob-txn.c | 2 +- util/id.c | 1 + 28 files changed, 396 insertions(+), 231 deletions(-) -- 2.8.1