Vladimir Sementsov-Ogievskiy <vsement...@yandex-team.ru> writes: > We need it for further blockdev-replace functionality. > > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@yandex-team.ru> > --- > block/export/export.c | 18 ++++++++++++++++++ > include/sysemu/block-backend-global-state.h | 1 + > 2 files changed, 19 insertions(+) > > diff --git a/block/export/export.c b/block/export/export.c > index 6d51ae8ed7..57beae7982 100644 > --- a/block/export/export.c > +++ b/block/export/export.c > @@ -355,3 +355,21 @@ BlockExportInfoList *qmp_query_block_exports(Error > **errp) > > return head; > } > + > +BlockBackend *blk_by_export_id(const char *id, Error **errp) > +{ > + BlockExport *exp; > + > + exp = blk_exp_find(id); > + if (exp == NULL) { > + error_setg(errp, "Export '%s' not found", id); > + return NULL; > + } > + > + if (!exp->blk) { > + error_setg(errp, "Export '%s' is empty", id);
Can this happen? > + return NULL; > + } > + > + return exp->blk; > +} > diff --git a/include/sysemu/block-backend-global-state.h > b/include/sysemu/block-backend-global-state.h > index ccb35546a1..410d0cc5c7 100644 > --- a/include/sysemu/block-backend-global-state.h > +++ b/include/sysemu/block-backend-global-state.h > @@ -74,6 +74,7 @@ void blk_detach_dev(BlockBackend *blk, DeviceState *dev); > DeviceState *blk_get_attached_dev(BlockBackend *blk); > BlockBackend *blk_by_dev(void *dev); > BlockBackend *blk_by_qdev_id(const char *id, Error **errp); > +BlockBackend *blk_by_export_id(const char *id, Error **errp); > void blk_set_dev_ops(BlockBackend *blk, const BlockDevOps *ops, void > *opaque); > > void blk_activate(BlockBackend *blk, Error **errp);