mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
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:
parent
377cc15bf1
commit
1581a70ddd
5 changed files with 64 additions and 29 deletions
|
@ -1290,6 +1290,7 @@ blk_co_do_preadv(BlockBackend *blk, int64_t offset, int64_t bytes,
|
|||
{
|
||||
int ret;
|
||||
BlockDriverState *bs;
|
||||
IO_CODE();
|
||||
|
||||
blk_wait_while_drained(blk);
|
||||
|
||||
|
@ -1337,6 +1338,7 @@ blk_co_do_pwritev_part(BlockBackend *blk, int64_t offset, int64_t bytes,
|
|||
{
|
||||
int ret;
|
||||
BlockDriverState *bs;
|
||||
IO_CODE();
|
||||
|
||||
blk_wait_while_drained(blk);
|
||||
|
||||
|
@ -1656,6 +1658,8 @@ void blk_aio_cancel_async(BlockAIOCB *acb)
|
|||
int coroutine_fn
|
||||
blk_co_do_ioctl(BlockBackend *blk, unsigned long int req, void *buf)
|
||||
{
|
||||
IO_CODE();
|
||||
|
||||
blk_wait_while_drained(blk);
|
||||
|
||||
if (!blk_is_available(blk)) {
|
||||
|
@ -1699,6 +1703,7 @@ int coroutine_fn
|
|||
blk_co_do_pdiscard(BlockBackend *blk, int64_t offset, int64_t bytes)
|
||||
{
|
||||
int ret;
|
||||
IO_CODE();
|
||||
|
||||
blk_wait_while_drained(blk);
|
||||
|
||||
|
@ -1757,6 +1762,7 @@ int blk_pdiscard(BlockBackend *blk, int64_t offset, int64_t bytes)
|
|||
int coroutine_fn blk_co_do_flush(BlockBackend *blk)
|
||||
{
|
||||
blk_wait_while_drained(blk);
|
||||
IO_CODE();
|
||||
|
||||
if (!blk_is_available(blk)) {
|
||||
return -ENOMEDIUM;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue