qemu/block
Christoph Hellwig 84a12e6648 block: separate raw images from the file protocol
We're running into various problems because the "raw" file access, which
is used internally by the various image formats is entangled with the
"raw" image format, which maps the VM view 1:1 to a file system.

This patch renames the raw file backends to the file protocol which
is treated like other protocols (e.g. nbd and http) and adds a new
"raw" image format which is just a wrapper around calls to the underlying
protocol.

The patch is surprisingly simple, besides changing the probing logical
in block.c to only look for image formats when using bdrv_open and
renaming of the old raw protocols to file there's almost nothing in there.

For creating images, a new bdrv_create_file is introduced which guesses the
protocol to use. This allows using qemu-img create -f raw (or just using the
default) for both files and host devices. Converting the other format drivers
to use this function to create their images is left for later patches.

The only issues still open are in the handling of the host devices.
Firstly in current qemu we can specifiy the host* format names
on various command line acceping images, but the new code can't
do that without adding some translation.  Second the layering breaks
the no_zero_init flag in the BlockDriver used by qemu-img.  I'm not
happy how this is done per-driver instead of per-state so I'll
prepare a separate patch to clean this up.

There's some more cleanup opportunity after this patch, e.g. using
separate lists and registration functions for image formats vs
protocols and maybe even host drivers, but this can be done at a
later stage.

Also there's a check for protocol in bdrv_open for the BDRV_O_SNAPSHOT
case that I don't quite understand, but which I fear won't work as
expected - possibly even before this patch.

Note that this patch requires various recent block patches from Kevin
and me, which should all be in his block queue.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2010-05-03 10:07:30 +02:00
..
blkdebug.c qcow2: Trigger blkdebug events 2010-04-23 16:08:46 +02:00
bochs.c Read-only device changed to opens it's file for read-only. 2010-01-26 15:42:01 -06:00
cloop.c Move block drivers into their own directory 2009-05-14 16:13:46 -05:00
cow.c cow: return errno instead of -1 2010-03-09 11:22:59 -06:00
curl.c don't dereference NULL after failed strdup 2010-02-10 14:00:53 -06:00
dmg.c dmg: fix ->open failure 2010-01-11 13:41:00 -06:00
nbd.c block: kill BDRV_O_CREAT 2010-01-26 15:42:02 -06:00
parallels.c Read-only device changed to opens it's file for read-only. 2010-01-26 15:42:01 -06:00
qcow2-cluster.c qcow2: Return 0/-errno in l2_allocate 2010-04-23 16:08:46 +02:00
qcow2-refcount.c qcow2: Trigger blkdebug events 2010-04-23 16:08:46 +02:00
qcow2-snapshot.c qcow2: Don't ignore qcow2_alloc_clusters return value 2010-01-26 14:59:19 -06:00
qcow2.c Fix OpenBSD build 2010-04-23 20:19:47 +00:00
qcow2.h qcow2: Fix signedness bugs 2010-02-10 11:56:57 -06:00
qcow.c qcow: return errno instead of -1 2010-03-09 11:23:00 -06:00
raw-posix-aio.h Remove aio_ctx from paio_* interface 2009-10-30 08:39:34 -05:00
raw-posix.c block: separate raw images from the file protocol 2010-05-03 10:07:30 +02:00
raw-win32.c block: separate raw images from the file protocol 2010-05-03 10:07:30 +02:00
raw.c block: separate raw images from the file protocol 2010-05-03 10:07:30 +02:00
vdi.c block/vdi: allow disk sizes not multiple of block size 2010-01-08 09:58:40 -06:00
vmdk.c Replace calls of old bdrv_open 2010-04-23 16:08:46 +02:00
vpc.c Fix spelling in comment. 2009-09-09 14:57:20 -05:00
vvfat.c Fix dead initialization, spotted by clang analyzer 2010-04-25 15:27:14 +00:00