mirror of https://github.com/xemu-project/xemu.git
block: Protect bs->parents with graph_lock
Almost all functions that access the parent link already take the graph lock now. Add locking to the remaining user in a test case and finally annotate the struct field itself as protected by the graph lock. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Message-ID: <20230929145157.45443-21-kwolf@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
3574499a1e
commit
b59b466071
|
@ -1043,7 +1043,7 @@ struct BdrvChild {
|
||||||
bool quiesced_parent;
|
bool quiesced_parent;
|
||||||
|
|
||||||
QLIST_ENTRY(BdrvChild) next;
|
QLIST_ENTRY(BdrvChild) next;
|
||||||
QLIST_ENTRY(BdrvChild) next_parent;
|
QLIST_ENTRY(BdrvChild GRAPH_RDLOCK_PTR) next_parent;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1180,7 +1180,7 @@ struct BlockDriverState {
|
||||||
BdrvChild *backing;
|
BdrvChild *backing;
|
||||||
BdrvChild *file;
|
BdrvChild *file;
|
||||||
|
|
||||||
QLIST_HEAD(, BdrvChild) parents;
|
QLIST_HEAD(, BdrvChild GRAPH_RDLOCK_PTR) parents;
|
||||||
|
|
||||||
QDict *options;
|
QDict *options;
|
||||||
QDict *explicit_options;
|
QDict *explicit_options;
|
||||||
|
|
|
@ -471,11 +471,16 @@ static void test_sync_op(const void *opaque)
|
||||||
BlockDriverState *bs;
|
BlockDriverState *bs;
|
||||||
BdrvChild *c;
|
BdrvChild *c;
|
||||||
|
|
||||||
|
GLOBAL_STATE_CODE();
|
||||||
|
|
||||||
blk = blk_new(qemu_get_aio_context(), BLK_PERM_ALL, BLK_PERM_ALL);
|
blk = blk_new(qemu_get_aio_context(), BLK_PERM_ALL, BLK_PERM_ALL);
|
||||||
bs = bdrv_new_open_driver(&bdrv_test, "base", BDRV_O_RDWR, &error_abort);
|
bs = bdrv_new_open_driver(&bdrv_test, "base", BDRV_O_RDWR, &error_abort);
|
||||||
bs->total_sectors = 65536 / BDRV_SECTOR_SIZE;
|
bs->total_sectors = 65536 / BDRV_SECTOR_SIZE;
|
||||||
blk_insert_bs(blk, bs, &error_abort);
|
blk_insert_bs(blk, bs, &error_abort);
|
||||||
|
|
||||||
|
bdrv_graph_rdlock_main_loop();
|
||||||
c = QLIST_FIRST(&bs->parents);
|
c = QLIST_FIRST(&bs->parents);
|
||||||
|
bdrv_graph_rdunlock_main_loop();
|
||||||
|
|
||||||
blk_set_aio_context(blk, ctx, &error_abort);
|
blk_set_aio_context(blk, ctx, &error_abort);
|
||||||
aio_context_acquire(ctx);
|
aio_context_acquire(ctx);
|
||||||
|
|
Loading…
Reference in New Issue