this patch adds the ability for targets to stay sparse during block migration (if the zero_blocks capability is set) and qemu-img convert even if the target does not have has_zero_init = 1.
the series was especially developed for iSCSI, but it should also work with other drivers with little or no adjustments. these adjustments should be limited to providing block provisioning information through get_block_info and/or honouring BDRV_REQ_MAY_UNMAP on writing zeroes. the last 4 patches are fixes/enhancements for the get_block_status API discovered during development of this series. Peter Lieven (12): block: make BdrvRequestFlags public block: add flags to bdrv_*_write_zeroes block: introduce BDRV_REQ_MAY_UNMAP in bdrv_co_write_zeroes iscsi: add .bdrv_co_write_zeroes block: add logical block provisioning information to BlockDriverInfo iscsi: add .bdrv_get_info block: introduce bdrv_zeroize qemu-img: conditionally zero out target on convert block/get_block_status: set *pnum = 0 on error block/get_block_status: avoid segfault if there is no backing_hd block/get_block_status: avoid redundant callouts on raw devices block/get_block_status: fix BDRV_BLOCK_ZERO for unallocated blocks block-migration.c | 3 +- block.c | 86 ++++++++++++++++++++++++++++++-------- block/backup.c | 3 +- block/iscsi.c | 102 +++++++++++++++++++++++++++++++++++++++++++++ block/qcow2.c | 2 +- block/qed.c | 3 +- block/raw_bsd.c | 5 ++- block/vmdk.c | 3 +- include/block/block.h | 20 ++++++++- include/block/block_int.h | 2 +- qemu-img.c | 22 +++++++--- qemu-io-cmds.c | 2 +- 12 files changed, 218 insertions(+), 35 deletions(-) -- 1.7.9.5