mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
block: Mark bdrv_parent_perms_conflict() and callers GRAPH_RDLOCK
The function reads the parents list, so it needs to hold the graph 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-14-kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
afdaeb9ea0
commit
3804e3cf54
9 changed files with 66 additions and 26 deletions
|
@ -311,7 +311,7 @@ struct BlockDriver {
|
|||
*/
|
||||
void (*bdrv_cancel_in_flight)(BlockDriverState *bs);
|
||||
|
||||
int (*bdrv_inactivate)(BlockDriverState *bs);
|
||||
int GRAPH_RDLOCK_PTR (*bdrv_inactivate)(BlockDriverState *bs);
|
||||
|
||||
int (*bdrv_snapshot_create)(BlockDriverState *bs,
|
||||
QEMUSnapshotInfo *sn_info);
|
||||
|
@ -944,8 +944,8 @@ struct BdrvChildClass {
|
|||
* when migration is completing) and it can start/stop requesting
|
||||
* permissions and doing I/O on it.
|
||||
*/
|
||||
void (*activate)(BdrvChild *child, Error **errp);
|
||||
int (*inactivate)(BdrvChild *child);
|
||||
void GRAPH_RDLOCK_PTR (*activate)(BdrvChild *child, Error **errp);
|
||||
int GRAPH_RDLOCK_PTR (*inactivate)(BdrvChild *child);
|
||||
|
||||
void GRAPH_WRLOCK_PTR (*attach)(BdrvChild *child);
|
||||
void GRAPH_WRLOCK_PTR (*detach)(BdrvChild *child);
|
||||
|
|
|
@ -212,8 +212,9 @@ void bdrv_get_cumulative_perm(BlockDriverState *bs, uint64_t *perm,
|
|||
* bdrv_child_refresh_perms() instead and make the parent's
|
||||
* .bdrv_child_perm() implementation return the correct values.
|
||||
*/
|
||||
int bdrv_child_try_set_perm(BdrvChild *c, uint64_t perm, uint64_t shared,
|
||||
Error **errp);
|
||||
int GRAPH_RDLOCK
|
||||
bdrv_child_try_set_perm(BdrvChild *c, uint64_t perm, uint64_t shared,
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
* Calls bs->drv->bdrv_child_perm() and updates the child's permission
|
||||
|
@ -223,7 +224,8 @@ int bdrv_child_try_set_perm(BdrvChild *c, uint64_t perm, uint64_t shared,
|
|||
* values than before, but which will not result in the block layer
|
||||
* automatically refreshing the permissions.
|
||||
*/
|
||||
int bdrv_child_refresh_perms(BlockDriverState *bs, BdrvChild *c, Error **errp);
|
||||
int GRAPH_RDLOCK
|
||||
bdrv_child_refresh_perms(BlockDriverState *bs, BdrvChild *c, Error **errp);
|
||||
|
||||
bool GRAPH_RDLOCK bdrv_recurse_can_replace(BlockDriverState *bs,
|
||||
BlockDriverState *to_replace);
|
||||
|
|
|
@ -61,8 +61,8 @@ int blk_insert_bs(BlockBackend *blk, BlockDriverState *bs, Error **errp);
|
|||
int blk_replace_bs(BlockBackend *blk, BlockDriverState *new_bs, Error **errp);
|
||||
bool bdrv_has_blk(BlockDriverState *bs);
|
||||
bool bdrv_is_root_node(BlockDriverState *bs);
|
||||
int blk_set_perm(BlockBackend *blk, uint64_t perm, uint64_t shared_perm,
|
||||
Error **errp);
|
||||
int GRAPH_UNLOCKED blk_set_perm(BlockBackend *blk, uint64_t perm,
|
||||
uint64_t shared_perm, Error **errp);
|
||||
void blk_get_perm(BlockBackend *blk, uint64_t *perm, uint64_t *shared_perm);
|
||||
|
||||
void blk_iostatus_enable(BlockBackend *blk);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue