block: drain from main loop thread in bdrv_co_yield_to_drain()
For simplicity, always run BlockDevOps .drained_begin/end/poll() callbacks in the main loop thread. This makes it easier to implement the callbacks and avoids extra locks. Move the function pointer declarations from the I/O Code section to the Global State section for BlockDevOps, BdrvChildClass, and BlockDriver. Narrow IO_OR_GS_CODE() to GLOBAL_STATE_CODE() where appropriate. The test-bdrv-drain test case calls bdrv_drain() from an IOThread. This is now only allowed from coroutine context, so update the test case to run in a coroutine. Signed-off-by:Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by:
Kevin Wolf <kwolf@redhat.com> Message-Id: <20230516190238.8401-11-stefanha@redhat.com> Signed-off-by:
Kevin Wolf <kwolf@redhat.com>
Showing
- block/io.c 10 additions, 4 deletionsblock/io.c
- include/block/block_int-common.h 36 additions, 36 deletionsinclude/block/block_int-common.h
- include/sysemu/block-backend-common.h 13 additions, 12 deletionsinclude/sysemu/block-backend-common.h
- tests/unit/test-bdrv-drain.c 8 additions, 6 deletionstests/unit/test-bdrv-drain.c
Loading
Please register or sign in to comment