qemu-e2k/hw/block
Olaf Hering 7875efb9f6 xen_disk: split discard input to match internal representation
The guest sends discard requests as u64 sector/count pairs, but the
block layer operates internally with s64/s32 pairs. The conversion
leads to IO errors in the guest, the discard request is not processed.

  domU.cfg:
  'vdev=xvda, format=qcow2, backendtype=qdisk, target=/x.qcow2'
  domU:
  mkfs.ext4 -F /dev/xvda
  Discarding device blocks: failed - Input/output error

Fix this by splitting the request into chunks of BDRV_REQUEST_MAX_SECTORS.
Add input range checking to avoid overflow.

Fixes f313520 ("xen_disk: add discard support")

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
2016-11-23 10:47:48 -08:00
..
dataplane virtio: set ISR on dataplane notifications 2016-11-18 17:29:25 +02:00
block.c block/qdev: Allow configuring rerror/werror with qdev properties 2016-07-13 13:32:27 +02:00
cdrom.c
ecc.c
fdc.c fdc: Move qdev properties to FloppyDrive 2016-10-27 16:29:13 -04:00
hd-geometry.c
m25p80.c block: m25p80: Fix vmstate structure name 2016-09-06 19:52:18 +01:00
Makefile.objs
nand.c
nvme.c hw/block/nvme: Simplify if-statements a little bit 2016-10-28 18:17:23 +03:00
nvme.h
onenand.c
pflash_cfi01.c pflash: make TYPE_CFI_PFLASH0{1,2} macros public 2016-06-29 14:03:46 +02:00
pflash_cfi02.c pflash: make TYPE_CFI_PFLASH0{1,2} macros public 2016-06-29 14:03:46 +02:00
tc58128.c block: Use DIV_ROUND_UP 2016-06-07 18:19:24 +03:00
trace-events trace-events: fix first line comment in trace-events 2016-08-12 10:36:01 +01:00
virtio-blk.c virtio-blk: always use dataplane path if ioeventfd is active 2016-10-30 19:51:32 +02:00
xen_blkif.h Clean up ill-advised or unusual header guards 2016-07-12 16:20:46 +02:00
xen_disk.c xen_disk: split discard input to match internal representation 2016-11-23 10:47:48 -08:00