block/coroutines: I/O and "I/O or GS" API

block coroutines functions run in different aiocontext, and are
not protected by the BQL. Therefore are I/O.

On the other side, generated_co_wrapper functions use BDRV_POLL_WHILE,
meaning the caller can either be the main loop or a specific iothread.

Signed-off-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>
Message-Id: <20220303151616.325444-25-eesposit@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Emanuele Giuseppe Esposito
2022-03-03 10:16:09 -05:00
committed by Kevin Wolf
parent 377cc15bf1
commit 1581a70ddd
5 changed files with 64 additions and 29 deletions

View File

@ -5454,6 +5454,7 @@ fail:
int coroutine_fn bdrv_co_check(BlockDriverState *bs,
BdrvCheckResult *res, BdrvCheckMode fix)
{
IO_CODE();
if (bs->drv == NULL) {
return -ENOMEDIUM;
}
@ -6663,6 +6664,7 @@ int bdrv_activate(BlockDriverState *bs, Error **errp)
int coroutine_fn bdrv_co_invalidate_cache(BlockDriverState *bs, Error **errp)
{
Error *local_err = NULL;
IO_CODE();
assert(!(bs->open_flags & BDRV_O_INACTIVE));