From: Ian Jackson Date: Wed, 2 Jul 2008 17:38:07 +0000 (+0100) Subject: qemu-xen: Fix extendable images X-Git-Tag: xen-3.3.0-rc1~61^2^2 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=refs%2Fheads%2Fiwj.block-rw-rangecheck;p=qemu-xen-4.0-testing.git qemu-xen: Fix extendable images bdrv_file_open should specify raw image format instead of guessing. This fixes a segfault when bdrv_open2 wants to access drv->flags. bdrv_file_open is used at least by qcow2. Additionally, move the extensible flag from bdrv_host_device to bdrv_raw. qcow2 wants to open the image file as an extensible file. Signed-off-by: Kevin Wolf --- diff --git a/block-raw-posix.c b/block-raw-posix.c index 05068362..c3252c9e 100644 --- a/block-raw-posix.c +++ b/block-raw-posix.c @@ -565,6 +565,8 @@ BlockDriver bdrv_raw = { .bdrv_pwrite = raw_pwrite, .bdrv_truncate = raw_truncate, .bdrv_getlength = raw_getlength, + + .bdrv_flags = BLOCK_DRIVER_FLAG_EXTENDABLE }; /***********************************************/ @@ -923,6 +925,4 @@ BlockDriver bdrv_host_device = { .bdrv_set_locked = raw_set_locked, /* generic scsi device */ .bdrv_ioctl = raw_ioctl, - - .bdrv_flags = BLOCK_DRIVER_FLAG_EXTENDABLE }; diff --git a/block-raw-win32.c b/block-raw-win32.c index 77d1936b..c755d35d 100644 --- a/block-raw-win32.c +++ b/block-raw-win32.c @@ -395,6 +395,8 @@ BlockDriver bdrv_raw = { .bdrv_pwrite = raw_pwrite, .bdrv_truncate = raw_truncate, .bdrv_getlength = raw_getlength, + + .bdrv_flags = BLOCK_DRIVER_FLAG_EXTENDABLE }; /***********************************************/ @@ -545,6 +547,4 @@ BlockDriver bdrv_host_device = { .bdrv_pread = raw_pread, .bdrv_pwrite = raw_pwrite, .bdrv_getlength = raw_getlength, - - .bdrv_flags = BLOCK_DRIVER_FLAG_EXTENDABLE; }; diff --git a/block.c b/block.c index 8932ff84..efed58f5 100644 --- a/block.c +++ b/block.c @@ -332,7 +332,7 @@ int bdrv_file_open(BlockDriverState **pbs, const char *filename, int flags) bs = bdrv_new(""); if (!bs) return -ENOMEM; - ret = bdrv_open2(bs, filename, flags | BDRV_O_FILE, NULL); + ret = bdrv_open2(bs, filename, flags | BDRV_O_FILE, &bdrv_raw); if (ret < 0) { bdrv_delete(bs); return ret;