mirror of https://github.com/xemu-project/xemu.git
block: Mark bdrv_co_debug_event() GRAPH_RDLOCK
This adds GRAPH_RDLOCK annotations to declare that callers of bdrv_co_debug_event() need to hold a reader lock for the graph. Unfortunately we cannot use a co_wrapper_bdrv_rdlock (i.e. make the coroutine wrapper a no_coroutine_fn), because the function is called (using the BLKDBG_EVENT macro) by mixed functions that run both in coroutine and non-coroutine context (for example many of the functions in qcow2-cluster.c and qcow2-refcount.c). Signed-off-by: Emanuele Giuseppe Esposito <eesposit@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Message-Id: <20230504115750.54437-16-kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
a00e70c012
commit
cb2bfaa450
2
block.c
2
block.c
|
@ -6399,6 +6399,8 @@ BlockStatsSpecific *bdrv_get_specific_stats(BlockDriverState *bs)
|
||||||
void coroutine_fn bdrv_co_debug_event(BlockDriverState *bs, BlkdebugEvent event)
|
void coroutine_fn bdrv_co_debug_event(BlockDriverState *bs, BlkdebugEvent event)
|
||||||
{
|
{
|
||||||
IO_CODE();
|
IO_CODE();
|
||||||
|
assert_bdrv_graph_readable();
|
||||||
|
|
||||||
if (!bs || !bs->drv || !bs->drv->bdrv_co_debug_event) {
|
if (!bs || !bs->drv || !bs->drv->bdrv_co_debug_event) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -205,10 +205,11 @@ void *qemu_try_blockalign0(BlockDriverState *bs, size_t size);
|
||||||
void bdrv_enable_copy_on_read(BlockDriverState *bs);
|
void bdrv_enable_copy_on_read(BlockDriverState *bs);
|
||||||
void bdrv_disable_copy_on_read(BlockDriverState *bs);
|
void bdrv_disable_copy_on_read(BlockDriverState *bs);
|
||||||
|
|
||||||
void coroutine_fn bdrv_co_debug_event(BlockDriverState *bs,
|
void coroutine_fn GRAPH_RDLOCK
|
||||||
BlkdebugEvent event);
|
bdrv_co_debug_event(BlockDriverState *bs, BlkdebugEvent event);
|
||||||
void co_wrapper_mixed bdrv_debug_event(BlockDriverState *bs,
|
|
||||||
BlkdebugEvent event);
|
void co_wrapper_mixed_bdrv_rdlock
|
||||||
|
bdrv_debug_event(BlockDriverState *bs, BlkdebugEvent event);
|
||||||
|
|
||||||
#define BLKDBG_EVENT(child, evt) \
|
#define BLKDBG_EVENT(child, evt) \
|
||||||
do { \
|
do { \
|
||||||
|
|
|
@ -735,8 +735,8 @@ struct BlockDriver {
|
||||||
int coroutine_fn GRAPH_RDLOCK_PTR (*bdrv_co_check)(
|
int coroutine_fn GRAPH_RDLOCK_PTR (*bdrv_co_check)(
|
||||||
BlockDriverState *bs, BdrvCheckResult *result, BdrvCheckMode fix);
|
BlockDriverState *bs, BdrvCheckResult *result, BdrvCheckMode fix);
|
||||||
|
|
||||||
void coroutine_fn (*bdrv_co_debug_event)(BlockDriverState *bs,
|
void coroutine_fn GRAPH_RDLOCK_PTR (*bdrv_co_debug_event)(
|
||||||
BlkdebugEvent event);
|
BlockDriverState *bs, BlkdebugEvent event);
|
||||||
|
|
||||||
/* io queue for linux-aio */
|
/* io queue for linux-aio */
|
||||||
void coroutine_fn GRAPH_RDLOCK_PTR (*bdrv_co_io_plug)(BlockDriverState *bs);
|
void coroutine_fn GRAPH_RDLOCK_PTR (*bdrv_co_io_plug)(BlockDriverState *bs);
|
||||||
|
|
Loading…
Reference in New Issue