Am 16.11.2022 um 13:22 hat Emanuele Giuseppe Esposito geschrieben: > It is always called in coroutine_fn callbacks, therefore > it can directly call bdrv_co_create(). > > Signed-off-by: Emanuele Giuseppe Esposito <eespo...@redhat.com> > --- > block.c | 6 ++++-- > include/block/block-global-state.h | 3 ++- > 2 files changed, 6 insertions(+), 3 deletions(-) > > diff --git a/block.c b/block.c > index c610a32e77..7a4c3eb540 100644 > --- a/block.c > +++ b/block.c > @@ -534,6 +534,7 @@ static int coroutine_fn bdrv_co_create(BlockDriver *drv, > const char *filename, > int ret; > char *filename_copy; > GLOBAL_STATE_CODE(); > + assert(qemu_in_coroutine());
We don't generally assert this, otherwise it would have to be in every coroutine_fn. > assert(*errp == NULL); > assert(drv); > > @@ -725,7 +726,8 @@ out: > return ret; > } > > -int bdrv_create_file(const char *filename, QemuOpts *opts, Error **errp) > +int coroutine_fn bdrv_create_file(const char *filename, QemuOpts *opts, > + Error **errp) Should it be renamed as bdrv_co_create_file()? > { > QemuOpts *protocol_opts; > BlockDriver *drv; > @@ -766,7 +768,7 @@ int bdrv_create_file(const char *filename, QemuOpts > *opts, Error **errp) > goto out; > } > > - ret = bdrv_create(drv, filename, protocol_opts, errp); > + ret = bdrv_co_create(drv, filename, protocol_opts, errp); > out: > qemu_opts_del(protocol_opts); > qobject_unref(qdict); Kevin