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(-)