[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 00/13] block: Fix bdrv_open*() calls from coroutine context
From: |
Kevin Wolf |
Subject: |
[PATCH 00/13] block: Fix bdrv_open*() calls from coroutine context |
Date: |
Thu, 26 Jan 2023 18:24:19 +0100 |
bdrv_open*() must not be called from coroutine context, amongst others
because it modifies the block graph. However, some functions - in
particular all .bdrv_co_create* implementations of image formats - do
call it from coroutine context. This is already wrong today, but when we
add locking, it actually becomes visible.
This series adds no_co_wrapper functions, which are automatically
generated wrappers that run in coroutine context and use a BH to call
the wrapped function outside of coroutine context. It then uses these
wrappers to fix the problematic bdrv_open*() calls.
Kevin Wolf (13):
block-coroutine-wrapper: Introduce no_co_wrapper
block: Create no_co_wrappers for open functions
luks: Fix .bdrv_co_create(_opts) to open images with no_co_wrapper
parallels: Fix .bdrv_co_create(_opts) to open images with
no_co_wrapper
qcow: Fix .bdrv_co_create(_opts) to open images with no_co_wrapper
qcow2: Fix open/create to open images with no_co_wrapper
qed: Fix .bdrv_co_create(_opts) to open images with no_co_wrapper
vdi: Fix .bdrv_co_create(_opts) to open images with no_co_wrapper
vhdx: Fix .bdrv_co_create(_opts) to open images with no_co_wrapper
vmdk: Fix .bdrv_co_create(_opts) to open images with no_co_wrapper
vpc: Fix .bdrv_co_create(_opts) to open images with no_co_wrapper
block: Fix bdrv_co_create_opts_simple() to open images with
no_co_wrapper
block: Assert non-coroutine context for bdrv_open_inherit()
include/block/block-common.h | 14 ++++
include/block/block-global-state.h | 35 ++++++---
include/sysemu/block-backend-global-state.h | 21 +++++-
block.c | 17 ++---
block/crypto.c | 10 +--
block/parallels.c | 10 +--
block/qcow.c | 10 +--
block/qcow2.c | 43 +++++------
block/qed.c | 10 +--
block/vdi.c | 10 +--
block/vhdx.c | 10 +--
block/vmdk.c | 22 +++---
block/vpc.c | 10 +--
scripts/block-coroutine-wrapper.py | 83 ++++++++++++++++++---
block/meson.build | 1 +
15 files changed, 207 insertions(+), 99 deletions(-)
--
2.38.1
- [PATCH 00/13] block: Fix bdrv_open*() calls from coroutine context,
Kevin Wolf <=
- [PATCH 01/13] block-coroutine-wrapper: Introduce no_co_wrapper, Kevin Wolf, 2023/01/26
- [PATCH 02/13] block: Create no_co_wrappers for open functions, Kevin Wolf, 2023/01/26
- [PATCH 03/13] luks: Fix .bdrv_co_create(_opts) to open images with no_co_wrapper, Kevin Wolf, 2023/01/26
- [PATCH 06/13] qcow2: Fix open/create to open images with no_co_wrapper, Kevin Wolf, 2023/01/26
- [PATCH 04/13] parallels: Fix .bdrv_co_create(_opts) to open images with no_co_wrapper, Kevin Wolf, 2023/01/26
- [PATCH 07/13] qed: Fix .bdrv_co_create(_opts) to open images with no_co_wrapper, Kevin Wolf, 2023/01/26
- [PATCH 08/13] vdi: Fix .bdrv_co_create(_opts) to open images with no_co_wrapper, Kevin Wolf, 2023/01/26
- [PATCH 09/13] vhdx: Fix .bdrv_co_create(_opts) to open images with no_co_wrapper, Kevin Wolf, 2023/01/26
- [PATCH 05/13] qcow: Fix .bdrv_co_create(_opts) to open images with no_co_wrapper, Kevin Wolf, 2023/01/26
- [PATCH 10/13] vmdk: Fix .bdrv_co_create(_opts) to open images with no_co_wrapper, Kevin Wolf, 2023/01/26