block: Convert bdrv_is_inserted() to co_wrapper
bdrv_is_inserted() is categorized as an I/O function, and it currently doesn't run in a coroutine. We should let it take a graph rdlock since it traverses the block nodes graph, which however is only possible in a coroutine. Therefore turn it into a co_wrapper to move the actual function into a coroutine where the lock can be taken. At the same time, add also blk_is_inserted as co_wrapper_mixed, since it is called in both coroutine and non-coroutine contexts. Because now this function creates a new coroutine and polls, we need to take the AioContext lock where it is missing, for the only reason that internally c_w_mixed_bdrv_rdlock calls AIO_WAIT_WHILE and it expects to release the AioContext lock. Once the rwlock is ultimated and placed in every place it needs to be, we will poll using AIO_WAIT_WHILE_UNLOCKED and remove the AioContext lock. Signed-off-by:Emanuele Giuseppe Esposito <eesposit@redhat.com> Signed-off-by:
Kevin Wolf <kwolf@redhat.com> Message-Id: <20230113204212.359076-5-kwolf@redhat.com> Reviewed-by:
Emanuele Giuseppe Esposito <eesposit@redhat.com> Signed-off-by:
Kevin Wolf <kwolf@redhat.com>
Showing
- block.c 4 additions, 4 deletionsblock.c
- block/block-backend.c 2 additions, 2 deletionsblock/block-backend.c
- block/file-posix.c 4 additions, 4 deletionsblock/file-posix.c
- block/io.c 6 additions, 6 deletionsblock/io.c
- blockdev.c 7 additions, 1 deletionblockdev.c
- include/block/block-io.h 4 additions, 1 deletioninclude/block/block-io.h
- include/block/block_int-common.h 1 addition, 1 deletioninclude/block/block_int-common.h
- include/sysemu/block-backend-io.h 4 additions, 1 deletioninclude/sysemu/block-backend-io.h
Loading
Please register or sign in to comment