This series introduces a bottom intermediate node that eliminates the dependency on the base that may change while stream job is running. It happens when stream/commit parallel jobs are running on the same backing chain. The base node of the stream job may be a top node of the parallel commit job and can change before the stream job is completed. We avoid that dependency by introducing the bottom node.
v4: trace_stream_start reverted to the base. bdrv_is_allocated_above_inclusive() deleted and the new parameter 'bool include_base' was added to the bdrv_is_allocated_above(). v3: bottom = bdrv_find_overlay() moved into the stream_start() v2: The function bdrv_find_overlay() with the same functionality has been used in the qmp_block_stream() to find a bottom node. The algorithm in the bdrv_do_is_allocated_above() was simplified. The commit messages were modified. Discussed in the e-mail threads with the message IDs <1553866154-257311-1-git-send-email-andrey.shinkev...@virtuozzo.com> <1550762799-830661-1-git-send-email-andrey.shinkev...@virtuozzo.com> <1554120365-39119-1-git-send-email-andrey.shinkev...@virtuozzo.com> <1554483379-682051-1-git-send-email-andrey.shinkev...@virtuozzo.com> Andrey Shinkevich (2): block: include base when checking image chain for block allocation block/stream: introduce a bottom node Vladimir Sementsov-Ogievskiy (1): block/stream: refactor stream_run: drop goto block/commit.c | 2 +- block/io.c | 14 +++++++++--- block/mirror.c | 2 +- block/replication.c | 2 +- block/stream.c | 62 +++++++++++++++++++++++--------------------------- include/block/block.h | 3 ++- tests/qemu-iotests/245 | 4 ++-- 7 files changed, 47 insertions(+), 42 deletions(-) -- 1.8.3.1