[Posting a preview RFC for the general idea discussion and internal API review. Libiscsi support is being worked on in the meantime.]
This series introduces block layer API for copy offloading and makes use of it in qemu-img convert. For now we implemented the operation in local file protocol with copy_file_range(2). Besides that it's possible to add similar to iscsi, nfs and potentially more. As far as its usage goes, in addition to qemu-img convert, we can emulate offloading in scsi-disk (EXTENDED COPY), and do similar to drive-mirror. The new bdrv_co_map_range can also be an alternative way to implement format drivers in the future, once we make block/io.c use it in preadv/pwritev paths. Fam Zheng (8): block: Introduce bdrv_co_map_range API qcow2: Implement bdrv_co_map_range block: Introduce bdrv_co_copy_range file-posix: Implement bdrv_co_copy_range file-posix: Implement bdrv_co_map_range raw: Implement raw_co_map_range block-backend: Add blk_co_copy_range qemu-img: Convert with copy offloading block/block-backend.c | 8 ++ block/file-posix.c | 92 +++++++++++++++++++- block/io.c | 192 +++++++++++++++++++++++++++++++++++++++++ block/qcow2.c | 103 +++++++++++++++------- block/raw-format.c | 9 ++ include/block/block.h | 12 ++- include/block/block_int.h | 35 ++++++++ include/block/raw-aio.h | 10 ++- include/sysemu/block-backend.h | 4 + qemu-img.c | 45 +++++++++- 10 files changed, 472 insertions(+), 38 deletions(-) -- 2.14.3