Loading block.c +15 −40 Original line number Diff line number Diff line Loading @@ -184,42 +184,6 @@ BlockDriver *bdrv_find_format(const char *format_name) return NULL; } int bdrv_create2(BlockDriver *drv, const char *filename, int64_t size_in_sectors, const char *backing_file, const char *backing_format, int flags) { QEMUOptionParameter *options; options = parse_option_parameters("", drv->create_options, NULL); // Process flags if (flags & ~(BLOCK_FLAG_ENCRYPT | BLOCK_FLAG_COMPAT6 | BLOCK_FLAG_COMPRESS)) { return -ENOTSUP; } if (flags & BLOCK_FLAG_ENCRYPT) { set_option_parameter_int(options, BLOCK_OPT_ENCRYPT, 1); } if (flags & BLOCK_FLAG_COMPAT6) { set_option_parameter_int(options, BLOCK_OPT_COMPAT6, 1); } // Add size to options set_option_parameter_int(options, BLOCK_OPT_SIZE, size_in_sectors * 512); // Backing files if ((backing_file != NULL && set_option_parameter(options, BLOCK_OPT_BACKING_FILE, backing_file)) || (backing_format != NULL && set_option_parameter(options, BLOCK_OPT_BACKING_FMT, backing_format))) { return -ENOTSUP; } return bdrv_create(drv, filename, options); } int bdrv_create(BlockDriver *drv, const char* filename, QEMUOptionParameter *options) { Loading Loading @@ -392,6 +356,8 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags, BlockDriverState *bs1; int64_t total_size; int is_protocol = 0; BlockDriver *bdrv_qcow2; QEMUOptionParameter *options; /* if snapshot, we create a temporary backing file and open it instead of opening 'filename' directly */ Loading Loading @@ -419,14 +385,23 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags, else realpath(filename, backing_filename); ret = bdrv_create2(bdrv_find_format("qcow2"), tmp_filename, total_size, backing_filename, (drv ? drv->format_name : NULL), 0); bdrv_qcow2 = bdrv_find_format("qcow2"); options = parse_option_parameters("", bdrv_qcow2->create_options, NULL); set_option_parameter_int(options, BLOCK_OPT_SIZE, total_size * 512); set_option_parameter(options, BLOCK_OPT_BACKING_FILE, backing_filename); if (drv) { set_option_parameter(options, BLOCK_OPT_BACKING_FMT, drv->format_name); } ret = bdrv_create(bdrv_qcow2, tmp_filename, options); if (ret < 0) { return ret; } filename = tmp_filename; drv = bdrv_find_format("qcow2"); drv = bdrv_qcow2; bs->is_temporary = 1; } Loading block/vvfat.c +9 −2 Original line number Diff line number Diff line Loading @@ -2770,6 +2770,8 @@ static BlockDriver vvfat_write_target = { static int enable_write_target(BDRVVVFATState *s) { BlockDriver *bdrv_qcow; QEMUOptionParameter *options; int size = sector2cluster(s, s->sector_count); s->used_clusters = calloc(size, 1); Loading @@ -2777,8 +2779,13 @@ static int enable_write_target(BDRVVVFATState *s) s->qcow_filename = qemu_malloc(1024); get_tmp_filename(s->qcow_filename, 1024); if (bdrv_create2(bdrv_find_format("qcow"), s->qcow_filename, s->sector_count, "fat:", NULL, 0) < 0) bdrv_qcow = bdrv_find_format("qcow"); options = parse_option_parameters("", bdrv_qcow->create_options, NULL); set_option_parameter_int(options, BLOCK_OPT_SIZE, s->sector_count * 512); set_option_parameter(options, BLOCK_OPT_BACKING_FILE, "fat:"); if (bdrv_create(bdrv_qcow, s->qcow_filename, options) < 0) return -1; s->qcow = bdrv_new(""); if (s->qcow == NULL || bdrv_open(s->qcow, s->qcow_filename, 0) < 0) Loading Loading
block.c +15 −40 Original line number Diff line number Diff line Loading @@ -184,42 +184,6 @@ BlockDriver *bdrv_find_format(const char *format_name) return NULL; } int bdrv_create2(BlockDriver *drv, const char *filename, int64_t size_in_sectors, const char *backing_file, const char *backing_format, int flags) { QEMUOptionParameter *options; options = parse_option_parameters("", drv->create_options, NULL); // Process flags if (flags & ~(BLOCK_FLAG_ENCRYPT | BLOCK_FLAG_COMPAT6 | BLOCK_FLAG_COMPRESS)) { return -ENOTSUP; } if (flags & BLOCK_FLAG_ENCRYPT) { set_option_parameter_int(options, BLOCK_OPT_ENCRYPT, 1); } if (flags & BLOCK_FLAG_COMPAT6) { set_option_parameter_int(options, BLOCK_OPT_COMPAT6, 1); } // Add size to options set_option_parameter_int(options, BLOCK_OPT_SIZE, size_in_sectors * 512); // Backing files if ((backing_file != NULL && set_option_parameter(options, BLOCK_OPT_BACKING_FILE, backing_file)) || (backing_format != NULL && set_option_parameter(options, BLOCK_OPT_BACKING_FMT, backing_format))) { return -ENOTSUP; } return bdrv_create(drv, filename, options); } int bdrv_create(BlockDriver *drv, const char* filename, QEMUOptionParameter *options) { Loading Loading @@ -392,6 +356,8 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags, BlockDriverState *bs1; int64_t total_size; int is_protocol = 0; BlockDriver *bdrv_qcow2; QEMUOptionParameter *options; /* if snapshot, we create a temporary backing file and open it instead of opening 'filename' directly */ Loading Loading @@ -419,14 +385,23 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags, else realpath(filename, backing_filename); ret = bdrv_create2(bdrv_find_format("qcow2"), tmp_filename, total_size, backing_filename, (drv ? drv->format_name : NULL), 0); bdrv_qcow2 = bdrv_find_format("qcow2"); options = parse_option_parameters("", bdrv_qcow2->create_options, NULL); set_option_parameter_int(options, BLOCK_OPT_SIZE, total_size * 512); set_option_parameter(options, BLOCK_OPT_BACKING_FILE, backing_filename); if (drv) { set_option_parameter(options, BLOCK_OPT_BACKING_FMT, drv->format_name); } ret = bdrv_create(bdrv_qcow2, tmp_filename, options); if (ret < 0) { return ret; } filename = tmp_filename; drv = bdrv_find_format("qcow2"); drv = bdrv_qcow2; bs->is_temporary = 1; } Loading
block/vvfat.c +9 −2 Original line number Diff line number Diff line Loading @@ -2770,6 +2770,8 @@ static BlockDriver vvfat_write_target = { static int enable_write_target(BDRVVVFATState *s) { BlockDriver *bdrv_qcow; QEMUOptionParameter *options; int size = sector2cluster(s, s->sector_count); s->used_clusters = calloc(size, 1); Loading @@ -2777,8 +2779,13 @@ static int enable_write_target(BDRVVVFATState *s) s->qcow_filename = qemu_malloc(1024); get_tmp_filename(s->qcow_filename, 1024); if (bdrv_create2(bdrv_find_format("qcow"), s->qcow_filename, s->sector_count, "fat:", NULL, 0) < 0) bdrv_qcow = bdrv_find_format("qcow"); options = parse_option_parameters("", bdrv_qcow->create_options, NULL); set_option_parameter_int(options, BLOCK_OPT_SIZE, s->sector_count * 512); set_option_parameter(options, BLOCK_OPT_BACKING_FILE, "fat:"); if (bdrv_create(bdrv_qcow, s->qcow_filename, options) < 0) return -1; s->qcow = bdrv_new(""); if (s->qcow == NULL || bdrv_open(s->qcow, s->qcow_filename, 0) < 0) Loading