Allow NBD to pass a byte-aligned discard request over the wire. Prerequisite: Kevin's block branch merged with current qemu.git master, plus my work on auto-fragmenting (v3 at the moment): https://lists.gnu.org/archive/html/qemu-devel/2016-07/msg03550.html
Also available as a tag at: git fetch git://repo.or.cz/qemu/ericb.git nbd-discard-v2 This is a merge of two series both posted before soft freeze, both of which had initial positive review with only a few changes needed: byte-based block discard https://lists.gnu.org/archive/html/qemu-devel/2016-06/msg06491.html Switch raw NBD to byte-based https://lists.gnu.org/archive/html/qemu-devel/2016-06/msg07030.html I'd still hoping for one other series to make it into 2.7, based on being posted prior to soft freeze: nbd: efficient write zeroes https://lists.gnu.org/archive/html/qemu-devel/2016-06/msg07463.html Changes since v1: - rebase to latest master (several contextual conflicts) - fix bug with aio_pdiscard using a stack variable qiov after its scope ends - tweak raw_bsd to remain sector-based if probing occurred 001/19:[----] [--] 'block: Convert bdrv_co_discard() to byte-based' 002/19:[0004] [FC] 'block: Convert bdrv_discard() to byte-based' 003/19:[0034] [FC] 'block: Switch BlockRequest to byte-based' 004/19:[0008] [FC] 'block: Convert bdrv_aio_discard() to byte-based' 005/19:[----] [--] 'block: Convert BB interface to byte-based discards' 006/19:[----] [--] 'raw-posix: Switch paio_submit() to byte-based' 007/19:[----] [--] 'rbd: Switch rbd_start_aio() to byte-based' 008/19:[----] [--] 'block: Convert .bdrv_aio_discard() to byte-based' 009/19:[----] [--] 'block: Add .bdrv_co_pdiscard() driver callback' 010/19:[----] [-C] 'blkreplay: Switch .bdrv_co_discard() to byte-based' 011/19:[----] [--] 'gluster: Switch .bdrv_co_discard() to byte-based' 012/19:[----] [--] 'iscsi: Switch .bdrv_co_discard() to byte-based' 013/19:[----] [--] 'nbd: Switch .bdrv_co_discard() to byte-based' 014/19:[----] [--] 'qcow2: Switch .bdrv_co_discard() to byte-based' 015/19:[----] [-C] 'raw_bsd: Switch .bdrv_co_discard() to byte-based' 016/19:[----] [--] 'sheepdog: Switch .bdrv_co_discard() to byte-based' 017/19:[----] [--] 'block: Kill .bdrv_co_discard()' 018/19:[----] [--] 'nbd: Convert to byte-based interface' 019/19:[0028] [FC] 'raw_bsd: Convert to byte-based interface' Eric Blake (19): block: Convert bdrv_co_discard() to byte-based block: Convert bdrv_discard() to byte-based block: Switch BlockRequest to byte-based block: Convert bdrv_aio_discard() to byte-based block: Convert BB interface to byte-based discards raw-posix: Switch paio_submit() to byte-based rbd: Switch rbd_start_aio() to byte-based block: Convert .bdrv_aio_discard() to byte-based block: Add .bdrv_co_pdiscard() driver callback blkreplay: Switch .bdrv_co_discard() to byte-based gluster: Switch .bdrv_co_discard() to byte-based iscsi: Switch .bdrv_co_discard() to byte-based nbd: Switch .bdrv_co_discard() to byte-based qcow2: Switch .bdrv_co_discard() to byte-based raw_bsd: Switch .bdrv_co_discard() to byte-based sheepdog: Switch .bdrv_co_discard() to byte-based block: Kill .bdrv_co_discard() nbd: Convert to byte-based interface raw_bsd: Convert to byte-based interface block/nbd-client.h | 11 ++- include/block/block.h | 10 +-- include/block/block_int.h | 8 +-- include/block/nbd.h | 1 - include/sysemu/block-backend.h | 9 ++- block/blkreplay.c | 8 +-- block/block-backend.c | 22 +++--- block/gluster.c | 14 ++-- block/io.c | 154 ++++++++++++++++++++--------------------- block/iscsi.c | 18 +++-- block/mirror.c | 5 +- block/nbd-client.c | 41 ++++++----- block/nbd.c | 24 +++---- block/qcow2-refcount.c | 4 +- block/qcow2.c | 10 +-- block/raw-posix.c | 24 +++---- block/raw-win32.c | 19 ++--- block/raw_bsd.c | 53 ++++++++------ block/rbd.c | 29 ++++---- block/sheepdog.c | 17 +++-- hw/block/xen_disk.c | 7 +- hw/ide/core.c | 6 +- hw/scsi/scsi-disk.c | 8 +-- nbd/server.c | 19 ++--- qemu-io-cmds.c | 3 +- block/trace-events | 4 +- 26 files changed, 260 insertions(+), 268 deletions(-) -- 2.5.5