diff options
-rw-r--r-- | block.c | 93 | ||||
-rw-r--r-- | block/cow.c | 4 | ||||
-rw-r--r-- | block/gluster.c | 8 | ||||
-rw-r--r-- | block/iscsi.c | 2 | ||||
-rw-r--r-- | block/nfs.c | 2 | ||||
-rw-r--r-- | block/qcow.c | 4 | ||||
-rw-r--r-- | block/qcow2.c | 6 | ||||
-rw-r--r-- | block/qed.c | 4 | ||||
-rw-r--r-- | block/raw-posix.c | 10 | ||||
-rw-r--r-- | block/raw-win32.c | 2 | ||||
-rw-r--r-- | block/raw_bsd.c | 4 | ||||
-rw-r--r-- | block/rbd.c | 2 | ||||
-rw-r--r-- | block/sheepdog.c | 6 | ||||
-rw-r--r-- | block/ssh.c | 2 | ||||
-rw-r--r-- | block/vdi.c | 2 | ||||
-rw-r--r-- | block/vhdx.c | 4 | ||||
-rw-r--r-- | block/vmdk.c | 6 | ||||
-rw-r--r-- | block/vpc.c | 2 | ||||
-rw-r--r-- | block/vvfat.c | 14 | ||||
-rw-r--r-- | include/block/block.h | 8 | ||||
-rw-r--r-- | include/block/block_int.h | 18 | ||||
-rw-r--r-- | include/qemu/option.h | 48 | ||||
-rw-r--r-- | qemu-img.c | 19 | ||||
-rw-r--r-- | util/qemu-option.c | 427 |
24 files changed, 67 insertions, 630 deletions
@@ -329,13 +329,6 @@ void bdrv_register(BlockDriver *bdrv) } } - if (bdrv->bdrv_create) { - assert(!bdrv->bdrv_create2 && !bdrv->create_opts); - assert(!bdrv->bdrv_amend_options2); - } else if (bdrv->bdrv_create2) { - assert(!bdrv->bdrv_create && !bdrv->create_options); - assert(!bdrv->bdrv_amend_options); - } QLIST_INSERT_HEAD(&bdrv_drivers, bdrv, list); } @@ -431,7 +424,6 @@ BlockDriver *bdrv_find_whitelisted_format(const char *format_name, typedef struct CreateCo { BlockDriver *drv; char *filename; - QEMUOptionParameter *options; QemuOpts *opts; int ret; Error *err; @@ -444,28 +436,8 @@ static void coroutine_fn bdrv_create_co_entry(void *opaque) CreateCo *cco = opaque; assert(cco->drv); - assert(!(cco->options && cco->opts)); - if (cco->drv->bdrv_create2) { - QemuOptsList *opts_list = NULL; - if (cco->options) { - opts_list = params_to_opts(cco->options); - cco->opts = qemu_opts_create(opts_list, NULL, 0, &error_abort); - } - ret = cco->drv->bdrv_create2(cco->filename, cco->opts, &local_err); - if (cco->options) { - qemu_opts_del(cco->opts); - qemu_opts_free(opts_list); - } - } else { - if (cco->opts) { - cco->options = opts_to_params(cco->opts); - } - ret = cco->drv->bdrv_create(cco->filename, cco->options, &local_err); - if (cco->opts) { - free_option_parameters(cco->options); - } - } + ret = cco->drv->bdrv_create(cco->filename, cco->opts, &local_err); if (local_err) { error_propagate(&cco->err, local_err); } @@ -473,7 +445,6 @@ static void coroutine_fn bdrv_create_co_entry(void *opaque) } int bdrv_create(BlockDriver *drv, const char* filename, - QEMUOptionParameter *options, QemuOpts *opts, Error **errp) { int ret; @@ -482,13 +453,12 @@ int bdrv_create(BlockDriver *drv, const char* filename, CreateCo cco = { .drv = drv, .filename = g_strdup(filename), - .options = options, .opts = opts, .ret = NOT_DONE, .err = NULL, }; - if (!drv->bdrv_create && !drv->bdrv_create2) { + if (!drv->bdrv_create) { error_setg(errp, "Driver '%s' does not support image creation", drv->format_name); ret = -ENOTSUP; goto out; @@ -519,8 +489,7 @@ out: return ret; } -int bdrv_create_file(const char* filename, QEMUOptionParameter *options, - QemuOpts *opts, Error **errp) +int bdrv_create_file(const char *filename, QemuOpts *opts, Error **errp) { BlockDriver *drv; Error *local_err = NULL; @@ -532,7 +501,7 @@ int bdrv_create_file(const char* filename, QEMUOptionParameter *options, return -ENOENT; } - ret = bdrv_create(drv, filename, options, opts, &local_err); + ret = bdrv_create(drv, filename, opts, &local_err); if (local_err) { error_propagate(errp, local_err); } @@ -1277,7 +1246,6 @@ void bdrv_append_temp_snapshot(BlockDriverState *bs, int flags, Error **errp) char *tmp_filename = g_malloc0(PATH_MAX + 1); int64_t total_size; BlockDriver *bdrv_qcow2; - QemuOptsList *create_opts = NULL; QemuOpts *opts = NULL; QDict *snapshot_options; BlockDriverState *bs_snapshot; @@ -1303,20 +1271,11 @@ void bdrv_append_temp_snapshot(BlockDriverState *bs, int flags, Error **errp) } bdrv_qcow2 = bdrv_find_format("qcow2"); - - assert(!(bdrv_qcow2->create_options && bdrv_qcow2->create_opts)); - if (bdrv_qcow2->create_options) { - create_opts = params_to_opts(bdrv_qcow2->create_options); - } else { - create_opts = bdrv_qcow2->create_opts; - } - opts = qemu_opts_create(create_opts, NULL, 0, &error_abort); + opts = qemu_opts_create(bdrv_qcow2->create_opts, NULL, 0, + &error_abort); qemu_opt_set_number(opts, BLOCK_OPT_SIZE, total_size); - ret = bdrv_create(bdrv_qcow2, tmp_filename, NULL, opts, &local_err); + ret = bdrv_create(bdrv_qcow2, tmp_filename, opts, &local_err); qemu_opts_del(opts); - if (bdrv_qcow2->create_options) { - qemu_opts_free(create_opts); - } if (ret < 0) { error_setg_errno(errp, -ret, "Could not create temporary overlay " "'%s': %s", tmp_filename, @@ -5579,10 +5538,8 @@ void bdrv_img_create(const char *filename, const char *fmt, return; } - create_opts = qemu_opts_append(create_opts, drv->create_opts, - drv->create_options); - create_opts = qemu_opts_append(create_opts, proto_drv->create_opts, - proto_drv->create_options); + create_opts = qemu_opts_append(create_opts, drv->create_opts); + create_opts = qemu_opts_append(create_opts, proto_drv->create_opts); /* Create parameter list with default values */ opts = qemu_opts_create(create_opts, NULL, 0, &error_abort); @@ -5675,7 +5632,7 @@ void bdrv_img_create(const char *filename, const char *fmt, puts(""); } - ret = bdrv_create(drv, filename, NULL, opts, &local_err); + ret = bdrv_create(drv, filename, opts, &local_err); if (ret == -EFBIG) { /* This is generally a better message than whatever the driver would @@ -5769,36 +5726,12 @@ void bdrv_add_before_write_notifier(BlockDriverState *bs, notifier_with_return_list_add(&bs->before_write_notifiers, notifier); } -int bdrv_amend_options(BlockDriverState *bs, QEMUOptionParameter *options, - QemuOpts *opts) +int bdrv_amend_options(BlockDriverState *bs, QemuOpts *opts) { - int ret; - assert(!(options && opts)); - - if (!bs->drv->bdrv_amend_options && !bs->drv->bdrv_amend_options2) { + if (!bs->drv->bdrv_amend_options) { return -ENOTSUP; } - if (bs->drv->bdrv_amend_options2) { - QemuOptsList *opts_list = NULL; - if (options) { - opts_list = params_to_opts(options); - opts = qemu_opts_create(opts_list, NULL, 0, &error_abort); - } - ret = bs->drv->bdrv_amend_options2(bs, opts); - if (options) { - qemu_opts_del(opts); - qemu_opts_free(opts_list); - } - } else { - if (opts) { - options = opts_to_params(opts); - } - ret = bs->drv->bdrv_amend_options(bs, options); - if (opts) { - free_option_parameters(options); - } - } - return ret; + return bs->drv->bdrv_amend_options(bs, opts); } /* This function will be called by the bdrv_recurse_is_first_non_filter method diff --git a/block/cow.c b/block/cow.c index af8575334a..a05a92cada 100644 --- a/block/cow.c +++ b/block/cow.c @@ -338,7 +338,7 @@ static int cow_create(const char *filename, QemuOpts *opts, Error **errp) image_sectors = qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0) / 512; image_filename = qemu_opt_get_del(opts, BLOCK_OPT_BACKING_FILE); - ret = bdrv_create_file(filename, NULL, opts, &local_err); + ret = bdrv_create_file(filename, opts, &local_err); if (ret < 0) { error_propagate(errp, local_err); goto exit; @@ -412,7 +412,7 @@ static BlockDriver bdrv_cow = { .bdrv_probe = cow_probe, .bdrv_open = cow_open, .bdrv_close = cow_close, - .bdrv_create2 = cow_create, + .bdrv_create = cow_create, .bdrv_has_zero_init = bdrv_has_zero_init_1, .bdrv_read = cow_co_read, diff --git a/block/gluster.c b/block/gluster.c index 5ff282bd74..9274dead7d 100644 --- a/block/gluster.c +++ b/block/gluster.c @@ -725,7 +725,7 @@ static BlockDriver bdrv_gluster = { .bdrv_reopen_commit = qemu_gluster_reopen_commit, .bdrv_reopen_abort = qemu_gluster_reopen_abort, .bdrv_close = qemu_gluster_close, - .bdrv_create2 = qemu_gluster_create, + .bdrv_create = qemu_gluster_create, .bdrv_getlength = qemu_gluster_getlength, .bdrv_get_allocated_file_size = qemu_gluster_allocated_file_size, .bdrv_truncate = qemu_gluster_truncate, @@ -752,7 +752,7 @@ static BlockDriver bdrv_gluster_tcp = { .bdrv_reopen_commit = qemu_gluster_reopen_commit, .bdrv_reopen_abort = qemu_gluster_reopen_abort, .bdrv_close = qemu_gluster_close, - .bdrv_create2 = qemu_gluster_create, + .bdrv_create = qemu_gluster_create, .bdrv_getlength = qemu_gluster_getlength, .bdrv_get_allocated_file_size = qemu_gluster_allocated_file_size, .bdrv_truncate = qemu_gluster_truncate, @@ -779,7 +779,7 @@ static BlockDriver bdrv_gluster_unix = { .bdrv_reopen_commit = qemu_gluster_reopen_commit, .bdrv_reopen_abort = qemu_gluster_reopen_abort, .bdrv_close = qemu_gluster_close, - .bdrv_create2 = qemu_gluster_create, + .bdrv_create = qemu_gluster_create, .bdrv_getlength = qemu_gluster_getlength, .bdrv_get_allocated_file_size = qemu_gluster_allocated_file_size, .bdrv_truncate = qemu_gluster_truncate, @@ -806,7 +806,7 @@ static BlockDriver bdrv_gluster_rdma = { .bdrv_reopen_commit = qemu_gluster_reopen_commit, .bdrv_reopen_abort = qemu_gluster_reopen_abort, .bdrv_close = qemu_gluster_close, - .bdrv_create2 = qemu_gluster_create, + .bdrv_create = qemu_gluster_create, .bdrv_getlength = qemu_gluster_getlength, .bdrv_get_allocated_file_size = qemu_gluster_allocated_file_size, .bdrv_truncate = qemu_gluster_truncate, diff --git a/block/iscsi.c b/block/iscsi.c index 626b7df7fd..6f87605e72 100644 --- a/block/iscsi.c +++ b/block/iscsi.c @@ -1605,7 +1605,7 @@ static BlockDriver bdrv_iscsi = { .bdrv_needs_filename = true, .bdrv_file_open = iscsi_open, .bdrv_close = iscsi_close, - .bdrv_create2 = iscsi_create, + .bdrv_create = iscsi_create, .create_opts = &iscsi_create_opts, .bdrv_reopen_prepare = iscsi_reopen_prepare, diff --git a/block/nfs.c b/block/nfs.c index 35e5008ead..ec43201817 100644 --- a/block/nfs.c +++ b/block/nfs.c @@ -457,7 +457,7 @@ static BlockDriver bdrv_nfs = { .bdrv_file_open = nfs_file_open, .bdrv_close = nfs_file_close, - .bdrv_create2 = nfs_file_create, + .bdrv_create = nfs_file_create, .bdrv_co_readv = nfs_co_readv, .bdrv_co_writev = nfs_co_writev, diff --git a/block/qcow.c b/block/qcow.c index bcacfb852f..1f2bac8a5f 100644 --- a/block/qcow.c +++ b/block/qcow.c @@ -712,7 +712,7 @@ static int qcow_create(const char *filename, QemuOpts *opts, Error **errp) flags |= BLOCK_FLAG_ENCRYPT; } - ret = bdrv_create_file(filename, NULL, opts, &local_err); + ret = bdrv_create_file(filename, opts, &local_err); if (ret < 0) { error_propagate(errp, local_err); goto cleanup; @@ -939,7 +939,7 @@ static BlockDriver bdrv_qcow = { .bdrv_open = qcow_open, .bdrv_close = qcow_close, .bdrv_reopen_prepare = qcow_reopen_prepare, - .bdrv_create2 = qcow_create, + .bdrv_create = qcow_create, .bdrv_has_zero_init = bdrv_has_zero_init_1, .bdrv_co_readv = qcow_co_readv, diff --git a/block/qcow2.c b/block/qcow2.c index 7150df66d6..b9d2fa6632 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -1627,7 +1627,7 @@ static int qcow2_create2(const char *filename, int64_t total_size, Error *local_err = NULL; int ret; - ret = bdrv_create_file(filename, NULL, opts, &local_err); + ret = bdrv_create_file(filename, opts, &local_err); if (ret < 0) { error_propagate(errp, local_err); return ret; @@ -2393,7 +2393,7 @@ static BlockDriver bdrv_qcow2 = { .bdrv_open = qcow2_open, .bdrv_close = qcow2_close, .bdrv_reopen_prepare = qcow2_reopen_prepare, - .bdrv_create2 = qcow2_create, + .bdrv_create = qcow2_create, .bdrv_has_zero_init = bdrv_has_zero_init_1, .bdrv_co_get_block_status = qcow2_co_get_block_status, .bdrv_set_key = qcow2_set_key, @@ -2425,7 +2425,7 @@ static BlockDriver bdrv_qcow2 = { .create_opts = &qcow2_create_opts, .bdrv_check = qcow2_check, - .bdrv_amend_options2 = qcow2_amend_options, + .bdrv_amend_options = qcow2_amend_options, }; static void bdrv_qcow2_init(void) diff --git a/block/qed.c b/block/qed.c index 7c4276e97c..092e6fb1d2 100644 --- a/block/qed.c +++ b/block/qed.c @@ -586,7 +586,7 @@ static int qed_create(const char *filename, uint32_t cluster_size, int ret = 0; BlockDriverState *bs; - ret = bdrv_create_file(filename, NULL, NULL, &local_err); + ret = bdrv_create_file(filename, NULL, &local_err); if (ret < 0) { error_propagate(errp, local_err); return ret; @@ -1658,7 +1658,7 @@ static BlockDriver bdrv_qed = { .bdrv_open = bdrv_qed_open, .bdrv_close = bdrv_qed_close, .bdrv_reopen_prepare = bdrv_qed_reopen_prepare, - .bdrv_create2 = bdrv_qed_create, + .bdrv_create = bdrv_qed_create, .bdrv_has_zero_init = bdrv_has_zero_init_1, .bdrv_co_get_block_status = bdrv_qed_co_get_block_status, .bdrv_aio_readv = bdrv_qed_aio_readv, diff --git a/block/raw-posix.c b/block/raw-posix.c index c718e49d84..dacf4fbbc8 100644 --- a/block/raw-posix.c +++ b/block/raw-posix.c @@ -1493,7 +1493,7 @@ static BlockDriver bdrv_file = { .bdrv_reopen_commit = raw_reopen_commit, .bdrv_reopen_abort = raw_reopen_abort, .bdrv_close = raw_close, - .bdrv_create2 = raw_create, + .bdrv_create = raw_create, .bdrv_has_zero_init = bdrv_has_zero_init_1, .bdrv_co_get_block_status = raw_co_get_block_status, .bdrv_co_write_zeroes = raw_co_write_zeroes, @@ -1893,7 +1893,7 @@ static BlockDriver bdrv_host_device = { .bdrv_reopen_prepare = raw_reopen_prepare, .bdrv_reopen_commit = raw_reopen_commit, .bdrv_reopen_abort = raw_reopen_abort, - .bdrv_create2 = hdev_create, + .bdrv_create = hdev_create, .create_opts = &raw_create_opts, .bdrv_co_write_zeroes = hdev_co_write_zeroes, @@ -2040,7 +2040,7 @@ static BlockDriver bdrv_host_floppy = { .bdrv_reopen_prepare = raw_reopen_prepare, .bdrv_reopen_commit = raw_reopen_commit, .bdrv_reopen_abort = raw_reopen_abort, - .bdrv_create2 = hdev_create, + .bdrv_create = hdev_create, .create_opts = &raw_create_opts, .bdrv_aio_readv = raw_aio_readv, @@ -2168,7 +2168,7 @@ static BlockDriver bdrv_host_cdrom = { .bdrv_reopen_prepare = raw_reopen_prepare, .bdrv_reopen_commit = raw_reopen_commit, .bdrv_reopen_abort = raw_reopen_abort, - .bdrv_create2 = hdev_create, + .bdrv_create = hdev_create, .create_opts = &raw_create_opts, .bdrv_aio_readv = raw_aio_readv, @@ -2302,7 +2302,7 @@ static BlockDriver bdrv_host_cdrom = { .bdrv_reopen_prepare = raw_reopen_prepare, .bdrv_reopen_commit = raw_reopen_commit, .bdrv_reopen_abort = raw_reopen_abort, - .bdrv_create2 = hdev_create, + .bdrv_create = hdev_create, .create_opts = &raw_create_opts, .bdrv_aio_readv = raw_aio_readv, diff --git a/block/raw-win32.c b/block/raw-win32.c index a71de70f68..902eab6100 100644 --- a/block/raw-win32.c +++ b/block/raw-win32.c @@ -548,7 +548,7 @@ static BlockDriver bdrv_file = { .bdrv_parse_filename = raw_parse_filename, .bdrv_file_open = raw_open, .bdrv_close = raw_close, - .bdrv_create2 = raw_create, + .bdrv_create = raw_create, .bdrv_has_zero_init = bdrv_has_zero_init_1, .bdrv_aio_readv = raw_aio_readv, diff --git a/block/raw_bsd.c b/block/raw_bsd.c index ee797fd877..492f58de69 100644 --- a/block/raw_bsd.c +++ b/block/raw_bsd.c @@ -148,7 +148,7 @@ static int raw_create(const char *filename, QemuOpts *opts, Error **errp) Error *local_err = NULL; int ret; - ret = bdrv_create_file(filename, NULL, opts, &local_err); + ret = bdrv_create_file(filename, opts, &local_err); if (local_err) { error_propagate(errp, local_err); } @@ -180,7 +180,7 @@ static BlockDriver bdrv_raw = { .bdrv_reopen_prepare = &raw_reopen_prepare, .bdrv_open = &raw_open, .bdrv_close = &raw_close, - .bdrv_create2 = &raw_create, + .bdrv_create = &raw_create, .bdrv_co_readv = &raw_co_readv, .bdrv_co_writev = &raw_co_writev, .bdrv_co_write_zeroes = &raw_co_write_zeroes, diff --git a/block/rbd.c b/block/rbd.c index e15d3129a5..2b797d3e8b 100644 --- a/block/rbd.c +++ b/block/rbd.c @@ -928,7 +928,7 @@ static BlockDriver bdrv_rbd = { .bdrv_needs_filename = true, .bdrv_file_open = qemu_rbd_open, .bdrv_close = qemu_rbd_close, - .bdrv_create2 = qemu_rbd_create, + .bdrv_create = qemu_rbd_create, .bdrv_has_zero_init = bdrv_has_zero_init_1, .bdrv_get_info = qemu_rbd_getinfo, .create_opts = &qemu_rbd_create_opts, diff --git a/block/sheepdog.c b/block/sheepdog.c index 07c467d010..2dcc5959f4 100644 --- a/block/sheepdog.c +++ b/block/sheepdog.c @@ -2603,7 +2603,7 @@ static BlockDriver bdrv_sheepdog = { .bdrv_needs_filename = true, .bdrv_file_open = sd_open, .bdrv_close = sd_close, - .bdrv_create2 = sd_create, + .bdrv_create = sd_create, .bdrv_has_zero_init = bdrv_has_zero_init_1, .bdrv_getlength = sd_getlength, .bdrv_get_allocated_file_size = sd_get_allocated_file_size, @@ -2636,7 +2636,7 @@ static BlockDriver bdrv_sheepdog_tcp = { .bdrv_needs_filename = true, .bdrv_file_open = sd_open, .bdrv_close = sd_close, - .bdrv_create2 = sd_create, + .bdrv_create = sd_create, .bdrv_has_zero_init = bdrv_has_zero_init_1, .bdrv_getlength = sd_getlength, .bdrv_get_allocated_file_size = sd_get_allocated_file_size, @@ -2669,7 +2669,7 @@ static BlockDriver bdrv_sheepdog_unix = { .bdrv_needs_filename = true, .bdrv_file_open = sd_open, .bdrv_close = sd_close, - .bdrv_create2 = sd_create, + .bdrv_create = sd_create, .bdrv_has_zero_init = bdrv_has_zero_init_1, .bdrv_getlength = sd_getlength, .bdrv_get_allocated_file_size = sd_get_allocated_file_size, diff --git a/block/ssh.c b/block/ssh.c index 9696c2bc1f..cd2fd751fe 100644 --- a/block/ssh.c +++ b/block/ssh.c @@ -1075,7 +1075,7 @@ static BlockDriver bdrv_ssh = { .instance_size = sizeof(BDRVSSHState), .bdrv_parse_filename = ssh_parse_filename, .bdrv_file_open = ssh_file_open, - .bdrv_create2 = ssh_create, + .bdrv_create = ssh_create, .bdrv_close = ssh_close, .bdrv_has_zero_init = ssh_has_zero_init, .bdrv_co_readv = ssh_co_readv, diff --git a/block/vdi.c b/block/vdi.c index 31d9b3ce44..01fe22ebe8 100644 --- a/block/vdi.c +++ b/block/vdi.c @@ -830,7 +830,7 @@ static BlockDriver bdrv_vdi = { .bdrv_open = vdi_open, .bdrv_close = vdi_close, .bdrv_reopen_prepare = vdi_reopen_prepare, - .bdrv_create2 = vdi_create, + .bdrv_create = vdi_create, .bdrv_has_zero_init = bdrv_has_zero_init_1, .bdrv_co_get_block_status = vdi_co_get_block_status, .bdrv_make_empty = vdi_make_empty, diff --git a/block/vhdx.c b/block/vhdx.c index e36f897953..fedcf9f9ca 100644 --- a/block/vhdx.c +++ b/block/vhdx.c @@ -1793,7 +1793,7 @@ static int vhdx_create(const char *filename, QemuOpts *opts, Error **errp) block_size = block_size > VHDX_BLOCK_SIZE_MAX ? VHDX_BLOCK_SIZE_MAX : block_size; - ret = bdrv_create_file(filename, NULL, opts, &local_err); + ret = bdrv_create_file(filename, opts, &local_err); if (ret < 0) { error_propagate(errp, local_err); goto exit; @@ -1922,7 +1922,7 @@ static BlockDriver bdrv_vhdx = { .bdrv_reopen_prepare = vhdx_reopen_prepare, .bdrv_co_readv = vhdx_co_readv, .bdrv_co_writev = vhdx_co_writev, - .bdrv_create2 = vhdx_create, + .bdrv_create = vhdx_create, .bdrv_get_info = vhdx_get_info, .bdrv_check = vhdx_check, diff --git a/block/vmdk.c b/block/vmdk.c index d19f15b7da..83dd6fe4fb 100644 --- a/block/vmdk.c +++ b/block/vmdk.c @@ -1539,7 +1539,7 @@ static int vmdk_create_extent(const char *filename, int64_t filesize, uint32_t *gd_buf = NULL; int gd_buf_size; - ret = bdrv_create_file(filename, NULL, NULL, &local_err); + ret = bdrv_create_file(filename, NULL, &local_err); if (ret < 0) { error_propagate(errp, local_err); goto exit; @@ -1873,7 +1873,7 @@ static int vmdk_create(const char *filename, QemuOpts *opts, Error **errp) if (!split && !flat) { desc_offset = 0x200; } else { - ret = bdrv_create_file(filename, NULL, opts, &local_err); + ret = bdrv_create_file(filename, opts, &local_err); if (ret < 0) { error_propagate(errp, local_err); goto exit; @@ -2169,7 +2169,7 @@ static BlockDriver bdrv_vmdk = { .bdrv_write_compressed = vmdk_write_compressed, .bdrv_co_write_zeroes = vmdk_co_write_zeroes, .bdrv_close = vmdk_close, - .bdrv_create2 = vmdk_create, + .bdrv_create = vmdk_create, .bdrv_co_flush_to_disk = vmdk_co_flush, .bdrv_co_get_block_status = vmdk_co_get_block_status, .bdrv_get_allocated_file_size = vmdk_get_allocated_file_size, diff --git a/block/vpc.c b/block/vpc.c index 8ebf424037..798d8540db 100644 --- a/block/vpc.c +++ b/block/vpc.c @@ -896,7 +896,7 @@ static BlockDriver bdrv_vpc = { .bdrv_open = vpc_open, .bdrv_close = vpc_close, .bdrv_reopen_prepare = vpc_reopen_prepare, - .bdrv_create2 = vpc_create, + .bdrv_create = vpc_create, .bdrv_read = vpc_co_read, .bdrv_write = vpc_co_write, diff --git a/block/vvfat.c b/block/vvfat.c index b1ab195334..70176b1619 100644 --- a/block/vvfat.c +++ b/block/vvfat.c @@ -2911,7 +2911,6 @@ static BlockDriver vvfat_write_target = { static int enable_write_target(BDRVVVFATState *s, Error **errp) { BlockDriver *bdrv_qcow = NULL; - QemuOptsList *create_opts = NULL; QemuOpts *opts = NULL; int ret; int size = sector2cluster(s, s->sector_count); @@ -2927,21 +2926,12 @@ static int enable_write_target(BDRVVVFATState *s, Error **errp) } bdrv_qcow = bdrv_find_format("qcow"); - assert(!(bdrv_qcow->create_opts && bdrv_qcow->create_options)); - if (bdrv_qcow->create_options) { - create_opts = params_to_opts(bdrv_qcow->create_options); - } else { - create_opts = bdrv_qcow->create_opts; - } - opts = qemu_opts_create(create_opts, NULL, 0, &error_abort); + opts = qemu_opts_create(bdrv_qcow->create_opts, NULL, 0, &error_abort); qemu_opt_set_number(opts, BLOCK_OPT_SIZE, s->sector_count * 512); qemu_opt_set(opts, BLOCK_OPT_BACKING_FILE, "fat:"); - ret = bdrv_create(bdrv_qcow, s->qcow_filename, NULL, opts, errp); + ret = bdrv_create(bdrv_qcow, s->qcow_filename, opts, errp); qemu_opts_del(opts); - if (bdrv_qcow->create_options) { - qemu_opts_free(create_opts); - } if (ret < 0) { goto err; } diff --git a/include/block/block.h b/include/block/block.h index 4312b8176e..f15b99b00b 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -204,9 +204,8 @@ BlockDriver *bdrv_find_format(const char *format_name); BlockDriver *bdrv_find_whitelisted_format(const char *format_name, bool readonly); int bdrv_create(BlockDriver *drv, const char* filename, - QEMUOptionParameter *options, QemuOpts *opts, Error **errp); -int bdrv_create_file(const char* filename, QEMUOptionParameter *options, - QemuOpts *opts, Error **errp); + QemuOpts *opts, Error **errp); +int bdrv_create_file(const char *filename, QemuOpts *opts, Error **errp); BlockDriverState *bdrv_new(const char *device_name, Error **errp); void bdrv_make_anon(BlockDriverState *bs); void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old); @@ -312,8 +311,7 @@ typedef enum { int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix); -int bdrv_amend_options(BlockDriverState *bs_new, QEMUOptionParameter *options, - QemuOpts *opts); +int bdrv_amend_options(BlockDriverState *bs_new, QemuOpts *opts); /* external snapshots */ bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs, diff --git a/include/block/block_int.h b/include/block/block_int.h index 8a77d79f41..7aa2213f77 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -116,10 +116,7 @@ struct BlockDriver { const uint8_t *buf, int nb_sectors); void (*bdrv_close)(BlockDriverState *bs); void (*bdrv_rebind)(BlockDriverState *bs); - int (*bdrv_create)(const char *filename, QEMUOptionParameter *options, - Error **errp); - /* FIXME: will remove the duplicate and rename back to bdrv_create later */ - int (*bdrv_create2)(const char *filename, QemuOpts *opts, Error **errp); + int (*bdrv_create)(const char *filename, QemuOpts *opts, Error **errp); int (*bdrv_set_key)(BlockDriverState *bs, const char *key); int (*bdrv_make_empty)(BlockDriverState *bs); /* aio */ @@ -218,12 +215,6 @@ struct BlockDriver { BlockDriverCompletionFunc *cb, void *opaque); /* List of options for creating images, terminated by name == NULL */ - QEMUOptionParameter *create_options; - /* FIXME: will replace create_options. - * These two fields are mutually exclusive. At most one is non-NULL. - * create_options should only be set with bdrv_create, and create_opts - * should only be set with bdrv_create2. - */ QemuOptsList *create_opts; /* @@ -233,12 +224,7 @@ struct BlockDriver { int (*bdrv_check)(BlockDriverState* bs, BdrvCheckResult *result, BdrvCheckMode fix); - int (*bdrv_amend_options)(BlockDriverState *bs, - QEMUOptionParameter *options); - /* FIXME: will remove the duplicate and rename back to - * bdrv_amend_options later - */ - int (*bdrv_amend_options2)(BlockDriverState *bs, QemuOpts *opts); + int (*bdrv_amend_options)(BlockDriverState *bs, QemuOpts *opts); void (*bdrv_debug_event)(BlockDriverState *bs, BlkDebugEvent event); diff --git a/include/qemu/option.h b/include/qemu/option.h index 34552678c3..921eccdb38 100644 --- a/include/qemu/option.h +++ b/include/qemu/option.h @@ -31,25 +31,6 @@ #include "qapi/error.h" #include "qapi/qmp/qdict.h" -enum QEMUOptionParType { - OPT_FLAG, - OPT_NUMBER, - OPT_SIZE, - OPT_STRING, -}; - -typedef struct QEMUOptionParameter { - const char *name; - enum QEMUOptionParType type; - union { - uint64_t n; - char* s; - } value; - const char *help; - bool assigned; -} QEMUOptionParameter; - - const char *get_opt_name(char *buf, int buf_size, const char *p, char delim); const char *get_opt_value(char *buf, int buf_size, const char *p); int get_next_param_value(char *buf, int buf_size, @@ -58,32 +39,11 @@ int get_param_value(char *buf, int buf_size, const char *tag, const char *str); -/* - * The following functions take a parameter list as input. This is a pointer to - * the first element of a QEMUOptionParameter array which is terminated by an - * entry with entry->name == NULL. - */ - -QEMUOptionParameter *get_option_parameter(QEMUOptionParameter *list, - const char *name); -int set_option_parameter(QEMUOptionParameter *list, const char *name, - const char *value); -int set_option_parameter_int(QEMUOptionParameter *list, const char *name, - uint64_t value); -QEMUOptionParameter *append_option_parameters(QEMUOptionParameter *dest, - QEMUOptionParameter *list); -QEMUOptionParameter *parse_option_parameters(const char *param, - QEMUOptionParameter *list, QEMUOptionParameter *dest); void parse_option_size(const char *name, const char *value, uint64_t *ret, Error **errp); -void free_option_parameters(QEMUOptionParameter *list); -void print_option_parameters(QEMUOptionParameter *list); -void print_option_help(QEMUOptionParameter *list); bool has_help_option(const char *param); bool is_valid_option_list(const char *param); -/* ------------------------------------------------------------------ */ - typedef struct QemuOpt QemuOpt; typedef struct QemuOpts QemuOpts; typedef struct QemuOptsList QemuOptsList; @@ -175,12 +135,6 @@ int qemu_opts_foreach(QemuOptsList *list, qemu_opts_loopfunc func, void *opaque, int abort_on_failure); void qemu_opts_print_help(QemuOptsList *list); void qemu_opts_free(QemuOptsList *list); -QEMUOptionParameter *opts_to_params(QemuOpts *opts); -QemuOptsList *params_to_opts(QEMUOptionParameter *list); -/* FIXME: will remove QEMUOptionParameter after all drivers switch to QemuOpts. - */ -QemuOptsList *qemu_opts_append(QemuOptsList *dst, - QemuOptsList *list, - QEMUOptionParameter *param); +QemuOptsList *qemu_opts_append(QemuOptsList *dst, QemuOptsList *list); #endif diff --git a/qemu-img.c b/qemu-img.c index 8acdcca8bf..c98896b281 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -280,8 +280,7 @@ static int print_block_option_help(const char *filename, const char *fmt) return 1; } - create_opts = qemu_opts_append(create_opts, drv->create_opts, - drv->create_options); + create_opts = qemu_opts_append(create_opts, drv->create_opts); if (filename) { proto_drv = bdrv_find_protocol(filename, true); if (!proto_drv) { @@ -289,8 +288,7 @@ static int print_block_option_help(const char *filename, const char *fmt) qemu_opts_free(create_opts); return 1; } - create_opts = qemu_opts_append(create_opts, proto_drv->create_opts, - proto_drv->create_options); + create_opts = qemu_opts_append(create_opts, proto_drv->create_opts); } qemu_opts_print_help(create_opts); @@ -1381,10 +1379,8 @@ static int img_convert(int argc, char **argv) goto out; } - create_opts = qemu_opts_append(create_opts, drv->create_opts, - drv->create_options); - create_opts = qemu_opts_append(create_opts, proto_drv->create_opts, - proto_drv->create_options); + create_opts = qemu_opts_append(create_opts, drv->create_opts); + create_opts = qemu_opts_append(create_opts, proto_drv->create_opts); opts = qemu_opts_create(create_opts, NULL, 0, &error_abort); if (options && qemu_opts_do_parse(opts, options, NULL)) { @@ -1437,7 +1433,7 @@ static int img_convert(int argc, char **argv) if (!skip_create) { /* Create the new image */ - ret = bdrv_create(drv, out_filename, NULL, opts, &local_err); + ret = bdrv_create(drv, out_filename, opts, &local_err); if (ret < 0) { error_report("%s: error while converting %s: %s", out_filename, out_fmt, error_get_pretty(local_err)); @@ -2766,8 +2762,7 @@ static int img_amend(int argc, char **argv) goto out; } - create_opts = qemu_opts_append(create_opts, bs->drv->create_opts, - bs->drv->create_options); + create_opts = qemu_opts_append(create_opts, bs->drv->create_opts); opts = qemu_opts_create(create_opts, NULL, 0, &error_abort); if (options && qemu_opts_do_parse(opts, options, NULL)) { error_report("Invalid options for file format '%s'", fmt); @@ -2775,7 +2770,7 @@ static int img_amend(int argc, char **argv) goto out; } - ret = bdrv_amend_options(bs, NULL, opts); + ret = bdrv_amend_options(bs, opts); if (ret < 0) { error_report("Error while amending options: %s", strerror(-ret)); goto out; diff --git a/util/qemu-option.c b/util/qemu-option.c index 0d9d3ec889..8ac8111ea8 100644 --- a/util/qemu-option.c +++ b/util/qemu-option.c @@ -123,22 +123,6 @@ int get_param_value(char *buf, int buf_size, return get_next_param_value(buf, buf_size, tag, &str); } -/* - * Searches an option list for an option with the given name - */ -QEMUOptionParameter *get_option_parameter(QEMUOptionParameter *list, - const char *name) -{ - while (list && list->name) { - if (!strcmp(list->name, name)) { - return list; - } - list++; - } - - return NULL; -} - static void parse_option_bool(const char *name, const char *value, bool *ret, Error **errp) { @@ -226,244 +210,6 @@ void parse_option_size(const char *name, const char *value, } } -/* - * Sets the value of a parameter in a given option list. The parsing of the - * value depends on the type of option: - * - * OPT_FLAG (uses value.n): - * If no value is given, the flag is set to 1. - * Otherwise the value must be "on" (set to 1) or "off" (set to 0) - * - * OPT_STRING (uses value.s): - * value is strdup()ed and assigned as option value - * - * OPT_SIZE (uses value.n): - * The value is converted to an integer. Suffixes for kilobytes etc. are - * allowed (powers of 1024). - * - * Returns 0 on succes, -1 in error cases - */ -int set_option_parameter(QEMUOptionParameter *list, const char *name, - const char *value) -{ - bool flag; - Error *local_err = NULL; - - // Find a matching parameter - list = get_option_parameter(list, name); - if (list == NULL) { - fprintf(stderr, "Unknown option '%s'\n", name); - return -1; - } - - // Process parameter - switch (list->type) { - case OPT_FLAG: - parse_option_bool(name, value, &flag, &local_err); - if (!local_err) { - list->value.n = flag; - } - break; - - case OPT_STRING: - if (value != NULL) { - list->value.s = g_strdup(value); - } else { - fprintf(stderr, "Option '%s' needs a parameter\n", name); - return -1; - } - break; - - case OPT_SIZE: - parse_option_size(name, value, &list->value.n, &local_err); - break; - - default: - fprintf(stderr, "Bug: Option '%s' has an unknown type\n", name); - return -1; - } - - if (local_err) { - qerror_report_err(local_err); - error_free(local_err); - return -1; - } - - list->assigned = true; - - return 0; -} - -/* - * Sets the given parameter to an integer instead of a string. - * This function cannot be used to set string options. - * - * Returns 0 on success, -1 in error cases - */ -int set_option_parameter_int(QEMUOptionParameter *list, const char *name, - uint64_t value) -{ - // Find a matching parameter - list = get_option_parameter(list, name); - if (list == NULL) { - fprintf(stderr, "Unknown option '%s'\n", name); - return -1; - } - - // Process parameter - switch (list->type) { - case OPT_FLAG: - case OPT_NUMBER: - case OPT_SIZE: - list->value.n = value; - break; - - default: - return -1; - } - - list->assigned = true; - - return 0; -} - -/* - * Frees a option list. If it contains strings, the strings are freed as well. - */ -void free_option_parameters(QEMUOptionParameter *list) -{ - QEMUOptionParameter *cur = list; - - while (cur && cur->name) { - if (cur->type == OPT_STRING) { - g_free(cur->value.s); - } - cur++; - } - - g_free(list); -} - -/* - * Count valid options in list - */ -static size_t count_option_parameters(QEMUOptionParameter *list) -{ - size_t num_options = 0; - - while (list && list->name) { - num_options++; - list++; - } - - return num_options; -} - -/* - * Append an option list (list) to an option list (dest). - * - * If dest is NULL, a new copy of list is created. - * - * Returns a pointer to the first element of dest (or the newly allocated copy) - */ -QEMUOptionParameter *append_option_parameters(QEMUOptionParameter *dest, - QEMUOptionParameter *list) -{ - size_t num_options, num_dest_options; - - num_options = count_option_parameters(dest); - num_dest_options = num_options; - - num_options += count_option_parameters(list); - - dest = g_realloc(dest, (num_options + 1) * sizeof(QEMUOptionParameter)); - dest[num_dest_options].name = NULL; - - while (list && list->name) { - if (get_option_parameter(dest, list->name) == NULL) { - dest[num_dest_options++] = *list; - dest[num_dest_options].name = NULL; - } - list++; - } - - return dest; -} - -/* - * Parses a parameter string (param) into an option list (dest). - * - * list is the template option list. If dest is NULL, a new copy of list is - * created. If list is NULL, this function fails. - * - * A parameter string consists of one or more parameters, separated by commas. - * Each parameter consists of its name and possibly of a value. In the latter - * case, the value is delimited by an = character. To specify a value which - * contains commas, double each comma so it won't be recognized as the end of - * the parameter. - * - * For more details of the parsing see above. - * - * Returns a pointer to the first element of dest (or the newly allocated copy) - * or NULL in error cases - */ -QEMUOptionParameter *parse_option_parameters(const char *param, - QEMUOptionParameter *list, QEMUOptionParameter *dest) -{ - QEMUOptionParameter *allocated = NULL; - char name[256]; - char value[256]; - char *param_delim, *value_delim; - char next_delim; - int i; - - if (list == NULL) { - return NULL; - } - - if (dest == NULL) { - dest = allocated = append_option_parameters(NULL, list); - } - - for (i = 0; dest[i].name; i++) { - dest[i].assigned = false; - } - - while (*param) { - - // Find parameter name and value in the string - param_delim = strchr(param, ','); - value_delim = strchr(param, '='); - - if (value_delim && (value_delim < param_delim || !param_delim)) { - next_delim = '='; - } else { - next_delim = ','; - value_delim = NULL; - } - - param = get_opt_name(name, sizeof(name), param, next_delim); - if (value_delim) { - param = get_opt_value(value, sizeof(value), param + 1); - } - if (*param != '\0') { - param++; - } - - // Set the parameter - if (set_option_parameter(dest, name, value_delim ? value : NULL)) { - goto fail; - } - } - - return dest; - -fail: - // Only free the list if it was newly allocated - free_option_parameters(allocated); - return NULL; -} - bool has_help_option(const char *param) { size_t buflen = strlen(param) + 1; @@ -513,46 +259,6 @@ out: return result; } -/* - * Prints all options of a list that have a value to stdout - */ -void print_option_parameters(QEMUOptionParameter *list) -{ - while (list && list->name) { - switch (list->type) { - case OPT_STRING: - if (list->value.s != NULL) { - printf("%s='%s' ", list->name, list->value.s); - } - break; - case OPT_FLAG: - printf("%s=%s ", list->name, list->value.n ? "on" : "off"); - break; - case OPT_SIZE: - case OPT_NUMBER: - printf("%s=%" PRId64 " ", list->name, list->value.n); - break; - default: - printf("%s=(unknown type) ", list->name); - break; - } - list++; - } -} - -/* - * Prints an overview of all available options - */ -void print_option_help(QEMUOptionParameter *list) -{ - printf("Supported options:\n"); - while (list && list->name) { - printf("%-16s %s\n", list->name, - list->help ? list->help : "No description available"); - list++; - } -} - void qemu_opts_print_help(QemuOptsList *list) { QemuOptDesc *desc; @@ -1369,121 +1075,6 @@ static size_t count_opts_list(QemuOptsList *list) return num_opts; } -/* Convert QEMUOptionParameter to QemuOpts - * FIXME: this function will be removed after all drivers - * switch to QemuOpts - */ -QemuOptsList *params_to_opts(QEMUOptionParameter *list) -{ - QemuOptsList *opts = NULL; - size_t num_opts, i = 0; - - if (!list) { - return NULL; - } - - num_opts = count_option_parameters(list); - opts = g_malloc0(sizeof(QemuOptsList) + - (num_opts + 1) * sizeof(QemuOptDesc)); - QTAILQ_INIT(&opts->head); - /* (const char *) members will point to malloced space and need to free */ - opts->allocated = true; - - while (list && list->name) { - opts->desc[i].name = g_strdup(list->name); - opts->desc[i].help = g_strdup(list->help); - switch (list->type) { - case OPT_FLAG: - opts->desc[i].type = QEMU_OPT_BOOL; - opts->desc[i].def_value_str = - g_strdup(list->value.n ? "on" : "off"); - break; - - case OPT_NUMBER: - opts->desc[i].type = QEMU_OPT_NUMBER; - if (list->value.n) { - opts->desc[i].def_value_str = - g_strdup_printf("%" PRIu64, list->value.n); - } - break; - - case OPT_SIZE: - opts->desc[i].type = QEMU_OPT_SIZE; - if (list->value.n) { - opts->desc[i].def_value_str = - g_strdup_printf("%" PRIu64, list->value.n); - } - break; - - case OPT_STRING: - opts->desc[i].type = QEMU_OPT_STRING; - opts->desc[i].def_value_str = g_strdup(list->value.s); - break; - } - - i++; - list++; - } - - return opts; -} - -/* convert QemuOpts to QEMUOptionParameter - * Note: result QEMUOptionParameter has shorter lifetime than - * input QemuOpts. - * FIXME: this function will be removed after all drivers - * switch to QemuOpts - */ -QEMUOptionParameter *opts_to_params(QemuOpts *opts) -{ - QEMUOptionParameter *dest = NULL; - QemuOptDesc *desc; - size_t num_opts, i = 0; - const char *tmp; - - if (!opts || !opts->list || !opts->list->desc) { - return NULL; - } - assert(!opts_accepts_any(opts)); - - num_opts = count_opts_list(opts->list); - dest = g_malloc0((num_opts + 1) * sizeof(QEMUOptionParameter)); - - desc = opts->list->desc; - while (desc && desc->name) { - dest[i].name = desc->name; - dest[i].help = desc->help; - dest[i].assigned = qemu_opt_find(opts, desc->name) ? true : false; - switch (desc->type) { - case QEMU_OPT_STRING: - dest[i].type = OPT_STRING; - tmp = qemu_opt_get(opts, desc->name); - dest[i].value.s = g_strdup(tmp); - break; - - case QEMU_OPT_BOOL: - dest[i].type = OPT_FLAG; - dest[i].value.n = qemu_opt_get_bool(opts, desc->name, 0) ? 1 : 0; - break; - - case QEMU_OPT_NUMBER: - dest[i].type = OPT_NUMBER; - dest[i].value.n = qemu_opt_get_number(opts, desc->name, 0); - break; - - case QEMU_OPT_SIZE: - dest[i].type = OPT_SIZE; - dest[i].value.n = qemu_opt_get_size(opts, desc->name, 0); - break; - } - - i++; - desc++; - } - - return dest; -} - void qemu_opts_free(QemuOptsList *list) { /* List members point to new malloced space and need to be freed. @@ -1504,27 +1095,20 @@ void qemu_opts_free(QemuOptsList *list) g_free(list); } -/* Realloc dst option list and append options either from an option list (list) - * or a QEMUOptionParameter (param) to it. dst could be NULL or a malloced list. - * FIXME: will remove QEMUOptionParameter after all drivers switch to QemuOpts. +/* Realloc dst option list and append options from an option list (list) + * to it. dst could be NULL or a malloced list. */ QemuOptsList *qemu_opts_append(QemuOptsList *dst, - QemuOptsList *list, - QEMUOptionParameter *param) + QemuOptsList *list) { size_t num_opts, num_dst_opts; QemuOptDesc *desc; bool need_init = false; - assert(!(list && param)); - if (!param && !list) { + if (!list) { return dst; } - if (param) { - list = params_to_opts(param); - } - /* If dst is NULL, after realloc, some area of dst should be initialized * before adding options to it. */ @@ -1565,8 +1149,5 @@ QemuOptsList *qemu_opts_append(QemuOptsList *dst, } } - if (param) { - qemu_opts_free(list); - } return dst; } |