qemu/block
Kevin Wolf ef845c3bf4 qcow2: Bring synchronous read/write back to life
When the synchronous read and write functions were dropped, they were replaced
by generic emulation functions. Unfortunately, these emulation functions don't
provide the same semantics as the original functions did.

The original bdrv_read would mean that we read some data synchronously and that
we won't be interrupted during this read. The latter assumption is no longer
true with the emulation function which needs to use qemu_aio_poll and therefore
allows the callback of any other concurrent AIO request to be run during the
read. Which in turn means that (meta)data read earlier could have changed and
be invalid now. qcow2 is not prepared to work in this way and it's just scary
how many places there are where other requests could run.

I'm not sure yet where exactly it breaks, but you'll see breakage with virtio
on qcow2 with a backing file. Providing synchronous functions again fixes the
problem for me.

Patchworks-ID: 35437
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
2009-10-15 09:32:04 -05:00
..
bochs.c Move block drivers into their own directory 2009-05-14 16:13:46 -05:00
cloop.c Move block drivers into their own directory 2009-05-14 16:13:46 -05:00
cow.c block: use fdatasync instead of fsync if possible 2009-09-11 10:19:46 -05:00
curl.c Fix Sparse warning about "expression using sizeof on a function" 2009-08-01 10:13:44 +00:00
dmg.c Revert "support colon in filenames" 2009-07-09 16:06:38 -05:00
nbd.c Move block drivers into their own directory 2009-05-14 16:13:46 -05:00
parallels.c Move block drivers into their own directory 2009-05-14 16:13:46 -05:00
qcow.c qcow1: Fix qcow_aio_writev 2009-07-10 13:44:29 -05:00
qcow2-cluster.c qcow2: Bring synchronous read/write back to life 2009-10-15 09:32:04 -05:00
qcow2-refcount.c qcow2: Increase maximum cluster size to 2 MB 2009-10-05 09:32:52 -05:00
qcow2-snapshot.c Fix QCOW2 debugging code to compile again 2009-06-29 08:52:40 -05:00
qcow2.c qcow2: Bring synchronous read/write back to life 2009-10-15 09:32:04 -05:00
qcow2.h qcow2: Bring synchronous read/write back to life 2009-10-15 09:32:04 -05:00
raw-posix-aio.h block: add aio_flush operation 2009-09-11 10:19:46 -05:00
raw-posix.c block/raw: Add create_options for host_device 2009-10-05 14:20:34 -05:00
raw-win32.c block: add bdrv_probe_device method 2009-06-15 14:04:22 +02:00
vdi.c Check availability of uuid header / library 2009-10-04 13:24:45 +02:00
vmdk.c vmdk: Fix backing file handling 2009-07-22 10:58:47 -05:00
vpc.c Fix spelling in comment. 2009-09-09 14:57:20 -05:00
vvfat.c Revert "Get rid of _t suffix" 2009-10-01 16:12:16 -05:00