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 <kwolf@suse.de>
.bdrv_pwrite = raw_pwrite,
.bdrv_truncate = raw_truncate,
.bdrv_getlength = raw_getlength,
+
+ .bdrv_flags = BLOCK_DRIVER_FLAG_EXTENDABLE
};
/***********************************************/
.bdrv_set_locked = raw_set_locked,
/* generic scsi device */
.bdrv_ioctl = raw_ioctl,
-
- .bdrv_flags = BLOCK_DRIVER_FLAG_EXTENDABLE
};
.bdrv_pwrite = raw_pwrite,
.bdrv_truncate = raw_truncate,
.bdrv_getlength = raw_getlength,
+
+ .bdrv_flags = BLOCK_DRIVER_FLAG_EXTENDABLE
};
/***********************************************/
.bdrv_pread = raw_pread,
.bdrv_pwrite = raw_pwrite,
.bdrv_getlength = raw_getlength,
-
- .bdrv_flags = BLOCK_DRIVER_FLAG_EXTENDABLE;
};
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;