The drain functions assume that we hold the AioContext lock of the drained block node. Make sure to actually take the lock.
Cc: qemu-sta...@nongnu.org Fixes: eb94b81a94bce112e6b206df846c1551aaf6cab6 Signed-off-by: Kevin Wolf <kw...@redhat.com> --- blockdev.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/blockdev.c b/blockdev.c index 229d2cce1b..0535a8dc9e 100644 --- a/blockdev.c +++ b/blockdev.c @@ -2481,13 +2481,16 @@ void coroutine_fn qmp_block_resize(bool has_device, const char *device, return; } + bdrv_co_lock(bs); bdrv_drained_begin(bs); + bdrv_co_unlock(bs); + old_ctx = bdrv_co_enter(bs); blk_truncate(blk, size, false, PREALLOC_MODE_OFF, 0, errp); bdrv_co_leave(bs, old_ctx); - bdrv_drained_end(bs); bdrv_co_lock(bs); + bdrv_drained_end(bs); blk_unref(blk); bdrv_co_unlock(bs); } -- 2.28.0