qemu/block
Stefan Hajnoczi 1f3ddfcb25 Revert "qed: Implement .bdrv_drain"
This reverts commit df9a681dc9.

Note that commit df9a681dc9 included some
unrelated hunks, possibly due to a merge failure or an overlooked
squash.  This only reverts the qed .bdrv_drain() implementation.

The qed .bdrv_drain() implementation is unsafe and can lead to a double
request completion.

Paolo Bonzini reports:
"The problem is that bdrv_qed_drain calls qed_plug_allocating_write_reqs
unconditionally, but this is not correct if an allocating write is
queued.  In this case, qed_unplug_allocating_write_reqs will restart the
allocating write and possibly cause it to complete.  The aiocb however
is still in use for the L2/L1 table writes, and will then be completed
again as soon as the table writes are stable."

For QEMU 2.6 we can simply revert this commit.  A full solution for the
qed need check timer may be added if the bdrv_drain() implementation is
extended.

Reported-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 1457431876-8475-1-git-send-email-stefanha@redhat.com
2016-03-17 09:50:14 +00:00
..
accounting.c block: Clean up includes 2016-01-20 13:36:23 +01:00
archipelago.c block: Clean up includes 2016-01-20 13:36:23 +01:00
backup.c backup: Use Bitmap to replace "s->bitmap" 2016-03-14 17:35:05 +01:00
blkdebug.c block: Clean up includes 2016-01-20 13:36:23 +01:00
blkverify.c block: Clean up includes 2016-01-20 13:36:23 +01:00
block-backend.c block: Introduce blk_set_allow_write_beyond_eof() 2016-03-14 16:46:43 +01:00
bochs.c block: Clean up includes 2016-01-20 13:36:23 +01:00
cloop.c block: Clean up includes 2016-01-20 13:36:23 +01:00
commit.c block: Clean up includes 2016-01-20 13:36:23 +01:00
curl.c curl: add support for HTTP authentication parameters 2016-02-29 14:54:31 -05:00
dirty-bitmap.c block: Move block dirty bitmap code to separate files 2016-03-14 17:35:05 +01:00
dmg.c block: Clean up includes 2016-01-20 13:36:23 +01:00
gluster.c block: Clean up includes 2016-01-20 13:36:23 +01:00
io.c block: add missing call to bdrv_drain_recurse 2016-02-09 13:52:26 +00:00
iscsi.c iscsi: add support for getting CHAP password via QCryptoSecret API 2016-02-29 14:54:31 -05:00
linux-aio.c block: Clean up includes 2016-01-20 13:36:23 +01:00
Makefile.objs block: Move block dirty bitmap code to separate files 2016-03-14 17:35:05 +01:00
mirror.c mirror: Add mirror_wait_for_io 2016-02-29 14:54:31 -05:00
nbd-client.c nbd: enable use of TLS with NBD block driver 2016-02-16 17:16:33 +01:00
nbd-client.h nbd: enable use of TLS with NBD block driver 2016-02-16 17:16:33 +01:00
nbd.c util: Shorten references into SocketAddress 2016-03-05 10:41:52 +01:00
nfs.c block/nfs: add support for setting debug level 2016-02-29 14:54:30 -05:00
null.c block: Clean up includes 2016-01-20 13:36:23 +01:00
parallels.c parallels: Use BB functions in .bdrv_create() 2016-03-14 16:46:43 +01:00
qapi.c block/qapi: Include empty drives in query-blockstats 2016-03-14 16:46:42 +01:00
qcow.c qcow: Use BB functions in .bdrv_create() 2016-03-14 16:46:43 +01:00
qcow2-cache.c block: Clean up includes 2016-01-20 13:36:23 +01:00
qcow2-cluster.c block: Clean up includes 2016-01-20 13:36:23 +01:00
qcow2-refcount.c block: Clean up includes 2016-01-20 13:36:23 +01:00
qcow2-snapshot.c block: Clean up includes 2016-01-20 13:36:23 +01:00
qcow2.c qcow2: Use BB functions in .bdrv_create() 2016-03-14 16:46:43 +01:00
qcow2.h qcow2: Add function for refcount order amendment 2015-12-18 14:34:43 +01:00
qed-check.c block: Clean up includes 2016-01-20 13:36:23 +01:00
qed-cluster.c block: Clean up includes 2016-01-20 13:36:23 +01:00
qed-gencb.c block: Clean up includes 2016-01-20 13:36:23 +01:00
qed-l2-cache.c block: Clean up includes 2016-01-20 13:36:23 +01:00
qed-table.c block: Clean up includes 2016-01-20 13:36:23 +01:00
qed.c Revert "qed: Implement .bdrv_drain" 2016-03-17 09:50:14 +00:00
qed.h qed: Really remove unused field QEDAIOCB.finished 2015-02-06 17:24:21 +01:00
quorum.c quorum: Fix crash in quorum_aio_cb() 2016-03-14 17:35:06 +01:00
raw-aio.h linux-aio: drop return code from laio_io_unplug and ioq_submit 2014-12-12 16:57:55 +00:00
raw-posix.c raw: Assign bs to file in raw_co_get_block_status 2016-02-02 17:50:47 +01:00
raw-win32.c block: Clean up includes 2016-01-20 13:36:23 +01:00
raw_bsd.c raw: Assign bs to file in raw_co_get_block_status 2016-02-02 17:50:47 +01:00
rbd.c rbd: add support for getting password from QCryptoSecret object 2016-02-29 14:54:30 -05:00
sheepdog.c block/sheepdog: fix argument passed to qemu_strtoul() 2016-03-16 13:25:29 -04:00
snapshot.c block: Clean up includes 2016-01-20 13:36:23 +01:00
ssh.c block: Clean up includes 2016-01-20 13:36:23 +01:00
stream.c block: Clean up includes 2016-01-20 13:36:23 +01:00
throttle-groups.c block: Clean up includes 2016-01-20 13:36:23 +01:00
vdi.c vdi: Use BB functions in .bdrv_create() 2016-03-14 16:46:43 +01:00
vhdx-endian.c block: Clean up includes 2016-01-20 13:36:23 +01:00
vhdx-log.c block: Clean up includes 2016-01-20 13:36:23 +01:00
vhdx.c vhdx: Use BB functions in .bdrv_create() 2016-03-14 16:46:43 +01:00
vhdx.h block: vhdx - update PAYLOAD_BLOCK_UNMAPPED value to match 1.00 spec 2014-12-12 15:42:22 +00:00
vmdk.c vmdk: Use BB functions in .bdrv_create() 2016-03-14 16:46:43 +01:00
vpc.c vpc: Use BB functions in .bdrv_create() 2016-03-14 16:46:44 +01:00
vvfat.c block: Add "file" output parameter to block status query functions 2016-02-02 17:50:47 +01:00
win32-aio.c block: Clean up includes 2016-01-20 13:36:23 +01:00
write-threshold.c block: Clean up includes 2016-01-20 13:36:23 +01:00