Despite the patch "freeze link to base node..." has been removed from the series in the current version 9, the iotest case test_stream_parallel does not pass after the COR-filter is inserted into the backing chain. As the test case may not be initialized, it does not make a sense and was removed again. The check with bdrv_is_allocated_above() takes place in the COR-filter and in the block-stream job both. An optimization of the block-stream job based on the filter functionality may be made in a separate series.
v10: 02: The missed new file block/copy-on-read.h added v9: 02: Refactored. 04: Base node name is used instead of the file name. 05: New implementation based on Max' review. 06: New. 07: New. The patch "freeze link to base node..." was deleted. 08: New. 09: The filter node options are initialized. The v8 Message-Id: <1598633579-221780-1-git-send-email-andrey.shinkev...@virtuozzo.com> Andrey Shinkevich (9): copy-on-read: Support preadv/pwritev_part functions copy-on-read: add filter append/drop functions qapi: add filter-node-name to block-stream copy-on-read: pass base node name to COR driver copy-on-read: limit guest COR activity to base in COR driver copy-on-read: skip non-guest reads if no copy needed stream: skip filters when writing backing file name to QCOW2 header block: remove unused backing-file name parameter block: apply COR-filter to block-stream jobs block/copy-on-read.c | 165 ++++++++++++++++++++++++++++++++++++++--- block/copy-on-read.h | 35 +++++++++ block/io.c | 2 +- block/monitor/block-hmp-cmds.c | 6 +- block/stream.c | 112 +++++++++++++++++----------- blockdev.c | 21 +----- include/block/block_int.h | 9 ++- qapi/block-core.json | 23 ++---- tests/qemu-iotests/030 | 51 ++----------- tests/qemu-iotests/030.out | 4 +- tests/qemu-iotests/141.out | 2 +- tests/qemu-iotests/245 | 19 +++-- 12 files changed, 302 insertions(+), 147 deletions(-) create mode 100644 block/copy-on-read.h -- 1.8.3.1