qemu/block
Anton Nefedov 18a59f03c3 block: fix write with zero flag set and iovector provided
The normal bdrv_co_pwritev() use is either
  - BDRV_REQ_ZERO_WRITE clear and iovector provided
  - BDRV_REQ_ZERO_WRITE set and iovector == NULL

while
  - the flag clear and iovector == NULL is an assertion failure
    in bdrv_co_do_zero_pwritev()
  - the flag set and iovector provided is in fact allowed
    (the flag prevails and zeroes are written)

However the alignment logic does not support the latter case so the padding
areas get overwritten with zeroes.

Currently, general functions like bdrv_rw_co() do provide iovector
regardless of flags. So, keep it supported and use bdrv_co_do_zero_pwritev()
alignment for it which also makes the code a bit more obvious anyway.

Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2018-03-02 18:39:07 +01:00
..
accounting.c
backup.c
blkdebug.c block: Switch passthrough drivers to .bdrv_co_block_status() 2018-03-02 18:39:07 +01:00
blkreplay.c
blkverify.c Move include qemu/option.h from qemu-common.h to actual users 2018-02-09 13:52:16 +01:00
block-backend.c Move include qemu/option.h from qemu-common.h to actual users 2018-02-09 13:52:16 +01:00
bochs.c
cloop.c
commit.c block: Switch passthrough drivers to .bdrv_co_block_status() 2018-03-02 18:39:07 +01:00
crypto.c block: Simplify bdrv_can_write_zeroes_with_unmap() 2018-02-09 12:32:44 -06:00
crypto.h
curl.c Move include qemu/option.h from qemu-common.h to actual users 2018-02-09 13:52:16 +01:00
dirty-bitmap.c block: maintain persistent disabled bitmaps 2018-02-13 16:59:58 +01:00
dmg-bz2.c
dmg.c
dmg.h
file-posix.c file-posix: Switch to .bdrv_co_block_status() 2018-03-02 18:39:07 +01:00
file-win32.c Move include qemu/option.h from qemu-common.h to actual users 2018-02-09 13:52:16 +01:00
gluster.c gluster: Switch to .bdrv_co_block_status() 2018-03-02 18:39:07 +01:00
io.c block: fix write with zero flag set and iovector provided 2018-03-02 18:39:07 +01:00
iscsi-opts.c Move include qemu/option.h from qemu-common.h to actual users 2018-02-09 13:52:16 +01:00
iscsi.c iscsi: Switch to .bdrv_co_block_status() 2018-03-02 18:39:07 +01:00
linux-aio.c
Makefile.objs block: Add VFIO based NVMe driver 2018-02-08 09:22:03 +08:00
mirror.c block: Switch passthrough drivers to .bdrv_co_block_status() 2018-03-02 18:39:07 +01:00
nbd-client.c nbd: Honor server's advertised minimum block size 2018-03-01 14:02:32 -06:00
nbd-client.h
nbd.c nbd: Honor server's advertised minimum block size 2018-03-01 14:02:32 -06:00
nfs.c Move include qemu/option.h from qemu-common.h to actual users 2018-02-09 13:52:16 +01:00
null.c null: Switch to .bdrv_co_block_status() 2018-03-02 18:39:07 +01:00
nvme.c nvme: Drop pointless .bdrv_co_get_block_status() 2018-03-02 18:39:07 +01:00
parallels.c parallels: Switch to .bdrv_co_block_status() 2018-03-02 18:39:07 +01:00
parallels.h Clean up includes 2018-02-09 05:05:11 +01:00
qapi.c Include qapi/qmp/qdict.h exactly where needed 2018-02-09 13:52:15 +01:00
qcow2-bitmap.c block: maintain persistent disabled bitmaps 2018-02-13 16:59:58 +01:00
qcow2-cache.c qcow2: Allow configuring the L2 slice size 2018-02-13 17:00:00 +01:00
qcow2-cluster.c qcow2: Rename l2_table in count_cow_clusters() 2018-02-13 17:00:00 +01:00
qcow2-refcount.c qcow2: Update qcow2_update_snapshot_refcount() to support L2 slices 2018-02-13 17:00:00 +01:00
qcow2-snapshot.c
qcow2.c qcow2: Switch to .bdrv_co_block_status() 2018-03-02 18:39:07 +01:00
qcow2.h qcow2: Allow configuring the L2 slice size 2018-02-13 17:00:00 +01:00
qcow.c qcow: Switch to .bdrv_co_block_status() 2018-03-02 18:39:07 +01:00
qed-check.c
qed-cluster.c
qed-l2-cache.c
qed-table.c
qed.c qed: Switch to .bdrv_co_block_status() 2018-03-02 18:39:07 +01:00
qed.h
quorum.c Move include qemu/option.h from qemu-common.h to actual users 2018-02-09 13:52:16 +01:00
raw-format.c raw: Switch to .bdrv_co_block_status() 2018-03-02 18:39:07 +01:00
rbd.c Move include qemu/option.h from qemu-common.h to actual users 2018-02-09 13:52:16 +01:00
replication.c Move include qemu/option.h from qemu-common.h to actual users 2018-02-09 13:52:16 +01:00
sheepdog.c sheepdog: Switch to .bdrv_co_block_status() 2018-03-02 18:39:07 +01:00
snapshot.c Move include qemu/option.h from qemu-common.h to actual users 2018-02-09 13:52:16 +01:00
ssh.c Move include qemu/option.h from qemu-common.h to actual users 2018-02-09 13:52:16 +01:00
stream.c
throttle-groups.c
throttle.c block: Switch passthrough drivers to .bdrv_co_block_status() 2018-03-02 18:39:07 +01:00
trace-events block: Add VFIO based NVMe driver 2018-02-08 09:22:03 +08:00
vdi.c vdi: Switch to .bdrv_co_block_status() 2018-03-02 18:39:07 +01:00
vhdx-endian.c
vhdx-log.c
vhdx.c Move include qemu/option.h from qemu-common.h to actual users 2018-02-09 13:52:16 +01:00
vhdx.h
vmdk.c vmdk: Switch to .bdrv_co_block_status() 2018-03-02 18:39:07 +01:00
vpc.c vpc: Switch to .bdrv_co_block_status() 2018-03-02 18:39:07 +01:00
vvfat.c vvfat: Switch to .bdrv_co_block_status() 2018-03-02 18:39:07 +01:00
vxhs.c
win32-aio.c
write-threshold.c Include qapi/error.h exactly where needed 2018-02-09 13:50:17 +01:00