We need it for further blockdev-replace functionality.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@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);
+ 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);
--
2.34.1
Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> writes: > We need it for further blockdev-replace functionality. > > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@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);
On 18.07.24 14:48, Markus Armbruster wrote: > Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> writes: > >> We need it for further blockdev-replace functionality. >> >> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@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? > Hmm, looking at the code in blk_exp_add: assert(exp->blk != NULL); QLIST_INSERT_HEAD(&block_exports, exp, next); return exp; seems not. And I can't find anything changing exp->blk except for blk_exp_add(). Will switch to assertion. >> + 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); > -- Best regards, Vladimir
© 2016 - 2025 Red Hat, Inc.