mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 01:03:55 -06:00
block: Mark bdrv_root_unref_child() GRAPH_WRLOCK
Instead of taking the writer lock internally, require callers to already hold it when calling bdrv_root_unref_child(). These callers will typically already hold the graph lock once the locking work is completed, which means that they can't call functions that take it internally. 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-20-kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
7f831d29e3
commit
ede01e4635
4 changed files with 9 additions and 4 deletions
6
block.c
6
block.c
|
@ -3268,7 +3268,6 @@ void bdrv_root_unref_child(BdrvChild *child)
|
|||
BlockDriverState *child_bs = child->bs;
|
||||
|
||||
GLOBAL_STATE_CODE();
|
||||
bdrv_graph_wrlock(NULL);
|
||||
bdrv_replace_child_noperm(child, NULL);
|
||||
bdrv_child_free(child);
|
||||
|
||||
|
@ -3288,8 +3287,7 @@ void bdrv_root_unref_child(BdrvChild *child)
|
|||
NULL);
|
||||
}
|
||||
|
||||
bdrv_graph_wrunlock();
|
||||
bdrv_unref(child_bs);
|
||||
bdrv_schedule_unref(child_bs);
|
||||
}
|
||||
|
||||
typedef struct BdrvSetInheritsFrom {
|
||||
|
@ -3366,8 +3364,10 @@ void bdrv_unref_child(BlockDriverState *parent, BdrvChild *child)
|
|||
return;
|
||||
}
|
||||
|
||||
bdrv_graph_wrlock(NULL);
|
||||
bdrv_unset_inherits_from(parent, child, NULL);
|
||||
bdrv_root_unref_child(child);
|
||||
bdrv_graph_wrunlock();
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue