We are planning to add more block export types than just NBD in the near future (e.g. vhost-user-blk and FUSE). This series lays the ground for this with some generic block export infrastructure and QAPI interfaces that will allow managing all of them (for now add/remove/query).
As a side effect, qemu-storage-daemon can now map --export directly to the block-export-add QMP command, similar to other command line options. The built-in NBD servers also gains new options that bring it at least a little closer to feature parity with qemu-nbd. This series is still RFC because the patches aren't very polished (though they also shouldn't be too bad), it's not completely clear if more features should be moved from NBD to the BlockExport layer in this series (or maybe even less, and the rest dealt with in a separate series) and qemu-iotests cases for the new interfaces are still missing. Kevin Wolf (22): nbd: Remove unused nbd_export_get_blockdev() qapi: Create block-export module qapi: Rename BlockExport to BlockExportOptions block/export: Add BlockExport infrastructure and block-export-add qemu-storage-daemon: Use qmp_block_export_add() qemu-nbd: Use raw block driver for --offset block/export: Remove magic from block-export-add nbd: Add max-connections to nbd-server-start nbd: Add writethrough to block-export-add nbd: Remove NBDExport.close callback qemu-nbd: Use blk_exp_add() to create the export nbd/server: Simplify export shutdown block/export: Move refcount from NBDExport to BlockExport block/export: Move AioContext from NBDExport to BlockExport block/export: Move device to BlockExportOptions block/export: Allocate BlockExport in blk_exp_add() block/export: Add blk_exp_close_all(_type) block/export: Add 'id' option to block-export-add block/export: Move strong user reference to block_exports block/export: Add block-export-del block/export: Move blk to BlockExport block/export: Add query-block-exports qapi/block-core.json | 166 --------------- qapi/block-export.json | 261 +++++++++++++++++++++++ qapi/qapi-schema.json | 1 + include/block/export.h | 73 +++++++ include/block/nbd.h | 25 +-- block.c | 2 +- block/export/export.c | 297 +++++++++++++++++++++++++++ block/monitor/block-hmp-cmds.c | 11 +- blockdev-nbd.c | 124 +++++------ nbd/server.c | 243 +++++++++------------- qemu-nbd.c | 67 +++--- qemu-storage-daemon.c | 25 +-- Makefile.objs | 6 +- block/Makefile.objs | 2 + block/export/Makefile.objs | 1 + qapi/Makefile.objs | 5 +- storage-daemon/qapi/qapi-schema.json | 1 + 17 files changed, 857 insertions(+), 453 deletions(-) create mode 100644 qapi/block-export.json create mode 100644 include/block/export.h create mode 100644 block/export/export.c create mode 100644 block/export/Makefile.objs -- 2.25.4