mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 18:44:58 -06:00
block: Mark bdrv_child_perm() GRAPH_RDLOCK
This adds GRAPH_RDLOCK annotations to declare that callers of bdrv_child_perm() need to hold a reader lock for the graph because some implementations access the children list of a node. The callers of bdrv_child_perm() conveniently already hold the lock. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Emanuele Giuseppe Esposito <eesposit@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Message-ID: <20230911094620.45040-16-kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
bce73bc25b
commit
c629b6d223
3 changed files with 16 additions and 15 deletions
11
block.c
11
block.c
|
@ -2228,11 +2228,12 @@ bdrv_parent_perms_conflict(BlockDriverState *bs, Error **errp)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bdrv_child_perm(BlockDriverState *bs, BlockDriverState *child_bs,
|
static void GRAPH_RDLOCK
|
||||||
BdrvChild *c, BdrvChildRole role,
|
bdrv_child_perm(BlockDriverState *bs, BlockDriverState *child_bs,
|
||||||
BlockReopenQueue *reopen_queue,
|
BdrvChild *c, BdrvChildRole role,
|
||||||
uint64_t parent_perm, uint64_t parent_shared,
|
BlockReopenQueue *reopen_queue,
|
||||||
uint64_t *nperm, uint64_t *nshared)
|
uint64_t parent_perm, uint64_t parent_shared,
|
||||||
|
uint64_t *nperm, uint64_t *nshared)
|
||||||
{
|
{
|
||||||
assert(bs->drv && bs->drv->bdrv_child_perm);
|
assert(bs->drv && bs->drv->bdrv_child_perm);
|
||||||
GLOBAL_STATE_CODE();
|
GLOBAL_STATE_CODE();
|
||||||
|
|
|
@ -341,11 +341,11 @@ static void cbw_refresh_filename(BlockDriverState *bs)
|
||||||
bs->file->bs->filename);
|
bs->file->bs->filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cbw_child_perm(BlockDriverState *bs, BdrvChild *c,
|
static void GRAPH_RDLOCK
|
||||||
BdrvChildRole role,
|
cbw_child_perm(BlockDriverState *bs, BdrvChild *c, BdrvChildRole role,
|
||||||
BlockReopenQueue *reopen_queue,
|
BlockReopenQueue *reopen_queue,
|
||||||
uint64_t perm, uint64_t shared,
|
uint64_t perm, uint64_t shared,
|
||||||
uint64_t *nperm, uint64_t *nshared)
|
uint64_t *nperm, uint64_t *nshared)
|
||||||
{
|
{
|
||||||
if (!(role & BDRV_CHILD_FILTERED)) {
|
if (!(role & BDRV_CHILD_FILTERED)) {
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -451,11 +451,11 @@ struct BlockDriver {
|
||||||
* permissions, but those that will be needed after applying the
|
* permissions, but those that will be needed after applying the
|
||||||
* @reopen_queue.
|
* @reopen_queue.
|
||||||
*/
|
*/
|
||||||
void (*bdrv_child_perm)(BlockDriverState *bs, BdrvChild *c,
|
void GRAPH_RDLOCK_PTR (*bdrv_child_perm)(
|
||||||
BdrvChildRole role,
|
BlockDriverState *bs, BdrvChild *c, BdrvChildRole role,
|
||||||
BlockReopenQueue *reopen_queue,
|
BlockReopenQueue *reopen_queue,
|
||||||
uint64_t parent_perm, uint64_t parent_shared,
|
uint64_t parent_perm, uint64_t parent_shared,
|
||||||
uint64_t *nperm, uint64_t *nshared);
|
uint64_t *nperm, uint64_t *nshared);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register/unregister a buffer for I/O. For example, when the driver is
|
* Register/unregister a buffer for I/O. For example, when the driver is
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue