There's only one change in this series: there's now a list of block jobs that is updated everytime a new one is created or destroyed.
This way we can iterate the list directly, rather than searching all BlockDriverStates for the ones that own a block job. Otherwise please check the summary I wrote for the previous series, because the rest of the changes are detailed there: https://lists.gnu.org/archive/html/qemu-devel/2015-03/msg04798.html v3: - Keep a list of block jobs and make qmp_query_block_jobs() iterate over it. v2: https://lists.gnu.org/archive/html/qemu-devel/2015-03/msg04798.html - The 'block-stream' command does not have a 'node-name' parameter anymore and reuses 'device' for that purpose. - Block jobs can now be owned by any intermediate node, and not just by the ones at the root. query-block-jobs is updated to reflect that change. - The 'device' parameter of all 'block-job-*' commands can now take a node name. - The BlockJobInfo type and all BLOCK_JOB_* events report the node name in the 'device' field if the node does not have a device name. - All intermediate nodes are blocked (and checked for blockers) during the streaming operation. Regards, Berto Alberto Garcia (6): block: keep a list of block jobs block: allow block jobs in any arbitrary node block: never cancel a streaming job without running stream_complete() block: Support streaming to an intermediate layer block: Add QMP support for streaming to an intermediate layer docs: Document how to stream to an intermediate layer block.c | 4 +++- block/mirror.c | 5 +++-- block/stream.c | 47 ++++++++++++++++++++++++++++++++++++----- blockdev.c | 53 ++++++++++++++++++++++------------------------- blockjob.c | 30 ++++++++++++++++++++------- docs/live-block-ops.txt | 32 +++++++++++++++++----------- docs/qmp/qmp-events.txt | 8 +++---- include/block/blockjob.h | 14 +++++++++++++ include/qapi/qmp/qerror.h | 3 --- qapi/block-core.json | 28 ++++++++++++++----------- 10 files changed, 149 insertions(+), 75 deletions(-) -- 2.1.4