xemu/block
Peter Maydell b54720b5d6 block/curl: Implement the libcurl timer callback interface
libcurl versions 7.16.0 and later have a timer callback interface which
must be implemented in order for libcurl to make forward progress (it
will sometimes rely on being called back on the timeout if there are
no file descriptors registered). Implement the callback, and use a
QEMU AIO timer to ensure we prod libcurl again when it asks us to.

Based on Peter's original patch plus my fix to add curl_multi_timeout_do.
Should compile just fine even on older versions of libcurl.

I also tried copy-on-read and streaming:

    $ ./qemu-img create -f qcow2 -o \
         backing_file=http://download.fedoraproject.org/pub/fedora/linux/releases/20/Live/x86_64/Fedora-Live-Desktop-x86_64-20-1.iso \
         foo.qcow2 1G
    $ x86_64-softmmu/qemu-system-x86_64 \
         -drive if=none,file=foo.qcow2,copy-on-read=on,id=cd \
         -device ide-cd,drive=cd --enable-kvm -m 1024

Direct http usage is probably too slow, but with copy-on-read ultimately
the image does boot!

After some time, streaming gets canceled by an EIO, which needs further
investigation.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
(cherry picked from commit 031fd1be56)

Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2014-02-21 00:34:40 -06:00
..
Makefile.objs block: vhdx - log parsing, replay, and flush support 2013-11-07 13:58:58 +01:00
backup.c qapi: make use of new BlockJobType 2013-10-11 10:52:54 +02:00
blkdebug.c blkdebug: Employ error parameter 2013-10-11 16:50:00 +02:00
blkverify.c blkverify: Employ error parameter 2013-10-11 16:50:00 +02:00
bochs.c bdrv: Use "Error" for opening images 2013-09-12 10:12:47 +02:00
cloop.c bdrv: Use "Error" for opening images 2013-09-12 10:12:47 +02:00
commit.c qapi: make use of new BlockJobType 2013-10-11 10:52:54 +02:00
cow.c block: Error parameter for create functions 2013-09-12 10:12:48 +02:00
curl.c block/curl: Implement the libcurl timer callback interface 2014-02-21 00:34:40 -06:00
dmg.c bdrv: Use "Error" for opening images 2013-09-12 10:12:47 +02:00
gluster.c block: introduce BlockDriver.bdrv_needs_filename to enable some drivers. 2013-09-25 16:21:28 +02:00
iscsi.c block/iscsi: use a bh to schedule co reentrance 2014-02-21 00:34:40 -06:00
linux-aio.c aio: drop io_flush argument 2013-08-19 15:52:19 +02:00
mirror.c qapi: make use of new BlockJobType 2013-10-11 10:52:54 +02:00
nbd.c bdrv: Use "Error" for opening images 2013-09-12 10:12:47 +02:00
parallels.c bdrv: Use "Error" for opening images 2013-09-12 10:12:47 +02:00
qapi.c block/qapi: Human-readable ImageInfoSpecific dump 2013-10-11 10:52:54 +02:00
qcow.c block: Error parameter for create functions 2013-09-12 10:12:48 +02:00
qcow2-cache.c qcow2: Use negated overflow check mask 2013-10-11 16:50:00 +02:00
qcow2-cluster.c qcow2: fix possible corruption when reading multiple clusters 2013-11-14 13:09:07 +01:00
qcow2-refcount.c qcow2: Make overlap check mask variable 2013-10-11 16:50:00 +02:00
qcow2-snapshot.c qcow2: Use negated overflow check mask 2013-10-11 16:50:00 +02:00
qcow2.c qcow2: Flush image after creation 2013-10-28 17:34:32 +01:00
qcow2.h qcow2: Add more overlap check bitmask macros 2013-10-11 16:50:00 +02:00
qed-check.c qed: mark image clean after repair succeeds 2012-08-10 10:25:12 +02:00
qed-cluster.c Use glib memory allocation and free functions 2011-08-20 23:01:08 -05:00
qed-gencb.c Use glib memory allocation and free functions 2011-08-20 23:01:08 -05:00
qed-l2-cache.c qed: do not evict in-use L2 table cache entries 2012-03-12 15:14:06 +01:00
qed-table.c misc: move include files to include/qemu/ 2012-12-19 08:32:39 +01:00
qed.c block: Error parameter for create functions 2013-09-12 10:12:48 +02:00
qed.h block: qed - use QEMU_PACKED for on-disk structures 2013-09-25 20:51:15 +02:00
raw-aio.h block: make discard asynchronous 2013-01-15 10:03:47 +01:00
raw-posix.c block: Print its file name if backing file opening failed 2013-11-14 13:09:06 +01:00
raw-win32.c block: Print its file name if backing file opening failed 2013-11-14 13:09:06 +01:00
raw_bsd.c block: Avoid unecessary drv->bdrv_getlength() calls 2013-10-29 13:10:26 +01:00
rbd.c rbd: avoid qemu_rbd_snap_list() memory leaks 2013-09-25 16:22:00 +02:00
sheepdog.c sheepdog: check simultaneous create in resend_aioreq 2013-10-30 12:22:24 +01:00
snapshot.c bdrv: Use "Error" for opening images 2013-09-12 10:12:47 +02:00
ssh.c bdrv: Use "Error" for creating images 2013-09-12 10:12:48 +02:00
stream.c qapi: make use of new BlockJobType 2013-10-11 10:52:54 +02:00
vdi.c block: vdi - use QEMU_PACKED for on-disk structures 2013-09-25 20:51:05 +02:00
vhdx-endian.c block: vhdx - move more endian translations to vhdx-endian.c 2013-11-07 13:58:59 +01:00
vhdx-log.c block: vhdx - add log write support 2013-11-07 13:58:59 +01:00
vhdx.c block: vhdx - add .bdrv_create() support 2013-11-07 13:58:59 +01:00
vhdx.h block: vhdx - add .bdrv_create() support 2013-11-07 13:58:59 +01:00
vmdk.c vmdk: Implment bdrv_get_specific_info 2013-10-31 14:44:43 +01:00
vpc.c block/vpc: fix virtual size for images created with disk2vhd 2013-11-07 13:58:58 +01:00
vvfat.c block: Error parameter for create functions 2013-09-12 10:12:48 +02:00
win32-aio.c win32-aio: drop win32_aio_flush_cb() 2013-08-22 22:05:04 +02:00