On 2018-02-08 20:23, Kevin Wolf wrote: > This adds a synchronous x-blockdev-create QMP command that can create > qcow2 images on a given node name. > > We don't want to block while creating an image, so this is not the final > interface in all aspects, but BlockdevCreateOptionsQcow2 and > .bdrv_co_create() are what they actually might look like in the end. In > any case, this should be good enough to test whether we interpret > BlockdevCreateOptions as we should. > > Signed-off-by: Kevin Wolf <[email protected]> > --- > qapi/block-core.json | 12 ++++++++ > include/block/block.h | 1 + > include/block/block_int.h | 2 ++ > block.c | 2 +- > block/create.c | 75 > +++++++++++++++++++++++++++++++++++++++++++++++ > block/qcow2.c | 3 +- > block/Makefile.objs | 2 +- > 7 files changed, 94 insertions(+), 3 deletions(-) > create mode 100644 block/create.c
[...]
> diff --git a/block/create.c b/block/create.c
> new file mode 100644
> index 0000000000..e95446a0f3
> --- /dev/null
> +++ b/block/create.c
> @@ -0,0 +1,75 @@
[...]
> +void qmp_x_blockdev_create(BlockdevCreateOptions *options, Error **errp)
> +{
> + const char *fmt = BlockdevDriver_str(options->driver);
> + BlockDriver *drv = bdrv_find_format(fmt);
> + Coroutine *co;
> + BlockdevCreateCo cco;
> +
> + /* If the driver is in the schema, we know that it exists. But it may not
> + * be whitelisted. */
> + assert(drv);
> + if (bdrv_uses_whitelist() && !bdrv_is_whitelisted(drv, true)) {
Isn't this more of an R/W case than RO?
Max
> + error_setg(errp, "Driver is not whitelisted");
> + return;
> + }
signature.asc
Description: OpenPGP digital signature
