diff options
| author | Peter Maydell | 2020-10-26 11:33:59 +0100 |
|---|---|---|
| committer | Peter Maydell | 2020-10-26 11:33:59 +0100 |
| commit | a5fac424c76d6401ecde4ecb7d846e656d0d6e89 (patch) | |
| tree | f3d1cc0acc33b594e23bba6d47d5b93cc30d4d02 /block/export/export.c | |
| parent | Merge remote-tracking branch 'remotes/kraxel/tags/modules-20201022-pull-reque... (diff) | |
| parent | iotests: add commit top->base cases to 274 (diff) | |
| download | qemu-a5fac424c76d6401ecde4ecb7d846e656d0d6e89.tar.gz qemu-a5fac424c76d6401ecde4ecb7d846e656d0d6e89.tar.xz qemu-a5fac424c76d6401ecde4ecb7d846e656d0d6e89.zip | |
Merge remote-tracking branch 'remotes/stefanha-gitlab/tags/block-pull-request' into staging
Pull request
v3:
* Fix linker error on FreeBSD and other !CONFIG_LINUX host OSes [Peter]
# gpg: Signature made Fri 23 Oct 2020 16:21:19 BST
# gpg: using RSA key 8695A8BFD3F97CDAAC35775A9CA4ABB381AB73C8
# gpg: Good signature from "Stefan Hajnoczi <stefanha@redhat.com>" [full]
# gpg: aka "Stefan Hajnoczi <stefanha@gmail.com>" [full]
# Primary key fingerprint: 8695 A8BF D3F9 7CDA AC35 775A 9CA4 ABB3 81AB 73C8
* remotes/stefanha-gitlab/tags/block-pull-request: (28 commits)
iotests: add commit top->base cases to 274
block/io: fix bdrv_is_allocated_above
block/io: bdrv_common_block_status_above: support bs == base
block/io: bdrv_common_block_status_above: support include_base
block/io: fix bdrv_co_block_status_above
block/export: add vhost-user-blk multi-queue support
block/export: add iothread and fixed-iothread options
block: move block exports to libblockdev
qemu-storage-daemon: avoid compiling blockdev_ss twice
util/vhost-user-server: use static library in meson.build
util/vhost-user-server: move header to include/
block/export: convert vhost-user-blk server to block export API
block/export: report flush errors
util/vhost-user-server: rework vu_client_trip() coroutine lifecycle
util/vhost-user-server: check EOF when reading payload
util/vhost-user-server: fix memory leak in vu_message_read()
util/vhost-user-server: drop unused DevicePanicNotifier
block/export: consolidate request structs into VuBlockReq
util/vhost-user-server: drop unnecessary watch deletion
util/vhost-user-server: drop unnecessary QOM cast
...
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'block/export/export.c')
| -rw-r--r-- | block/export/export.c | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/block/export/export.c b/block/export/export.c index f2c00d13bf..c3478c6c97 100644 --- a/block/export/export.c +++ b/block/export/export.c @@ -15,15 +15,22 @@ #include "block/block.h" #include "sysemu/block-backend.h" +#include "sysemu/iothread.h" #include "block/export.h" #include "block/nbd.h" #include "qapi/error.h" #include "qapi/qapi-commands-block-export.h" #include "qapi/qapi-events-block-export.h" #include "qemu/id.h" +#if defined(CONFIG_LINUX) && defined(CONFIG_VHOST_USER) +#include "vhost-user-blk-server.h" +#endif static const BlockExportDriver *blk_exp_drivers[] = { &blk_exp_nbd, +#if defined(CONFIG_LINUX) && defined(CONFIG_VHOST_USER) + &blk_exp_vhost_user_blk, +#endif }; /* Only accessed from the main thread */ @@ -57,10 +64,11 @@ static const BlockExportDriver *blk_exp_find_driver(BlockExportType type) BlockExport *blk_exp_add(BlockExportOptions *export, Error **errp) { + bool fixed_iothread = export->has_fixed_iothread && export->fixed_iothread; const BlockExportDriver *drv; BlockExport *exp = NULL; BlockDriverState *bs; - BlockBackend *blk; + BlockBackend *blk = NULL; AioContext *ctx; uint64_t perm; int ret; @@ -96,6 +104,28 @@ BlockExport *blk_exp_add(BlockExportOptions *export, Error **errp) ctx = bdrv_get_aio_context(bs); aio_context_acquire(ctx); + if (export->has_iothread) { + IOThread *iothread; + AioContext *new_ctx; + + iothread = iothread_by_id(export->iothread); + if (!iothread) { + error_setg(errp, "iothread \"%s\" not found", export->iothread); + goto fail; + } + + new_ctx = iothread_get_aio_context(iothread); + + ret = bdrv_try_set_aio_context(bs, new_ctx, errp); + if (ret == 0) { + aio_context_release(ctx); + aio_context_acquire(new_ctx); + ctx = new_ctx; + } else if (fixed_iothread) { + goto fail; + } + } + /* * Block exports are used for non-shared storage migration. Make sure * that BDRV_O_INACTIVE is cleared and the image is ready for write @@ -110,6 +140,11 @@ BlockExport *blk_exp_add(BlockExportOptions *export, Error **errp) } blk = blk_new(ctx, perm, BLK_PERM_ALL); + + if (!fixed_iothread) { + blk_set_allow_aio_context_change(blk, true); + } + ret = blk_insert_bs(blk, bs, errp); if (ret < 0) { goto fail; |
