Skip to content

Commit

Permalink
block: Take graph rdlock in bdrv_inactivate_all()
Browse files Browse the repository at this point in the history
The function reads the parents list, so it needs to hold the graph lock.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Message-ID: <20230929145157.45443-4-kwolf@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
  • Loading branch information
kevmw committed Oct 12, 2023
1 parent e84c07b commit 0e6bad1
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions block.c
Original file line number Diff line number Diff line change
Expand Up @@ -6976,7 +6976,8 @@ void bdrv_activate_all(Error **errp)
}
}

static bool bdrv_has_bds_parent(BlockDriverState *bs, bool only_active)
static bool GRAPH_RDLOCK
bdrv_has_bds_parent(BlockDriverState *bs, bool only_active)
{
BdrvChild *parent;
GLOBAL_STATE_CODE();
Expand All @@ -6993,14 +6994,13 @@ static bool bdrv_has_bds_parent(BlockDriverState *bs, bool only_active)
return false;
}

static int bdrv_inactivate_recurse(BlockDriverState *bs)
static int GRAPH_RDLOCK bdrv_inactivate_recurse(BlockDriverState *bs)
{
BdrvChild *child, *parent;
int ret;
uint64_t cumulative_perms, cumulative_shared_perms;

GLOBAL_STATE_CODE();
GRAPH_RDLOCK_GUARD_MAINLOOP();

if (!bs->drv) {
return -ENOMEDIUM;
Expand Down Expand Up @@ -7066,6 +7066,7 @@ int bdrv_inactivate_all(void)
GSList *aio_ctxs = NULL, *ctx;

GLOBAL_STATE_CODE();
GRAPH_RDLOCK_GUARD_MAINLOOP();

for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
AioContext *aio_context = bdrv_get_aio_context(bs);
Expand Down

0 comments on commit 0e6bad1

Please sign in to comment.