mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
block: Mark public read/write functions GRAPH_RDLOCK
This adds GRAPH_RDLOCK annotations to declare that callers of bdrv_co_pread*/pwrite*() need to hold a reader lock for the graph. For some places, we know that they will hold the lock, but we don't have the GRAPH_RDLOCK annotations yet. In this case, add assume_graph_lock() with a FIXME comment. These places will be removed once everything is properly annotated. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Message-Id: <20230203152202.49054-12-kwolf@redhat.com> Reviewed-by: Emanuele Giuseppe Esposito <eesposit@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
7b1fb72e2c
commit
b9b10c35e5
31 changed files with 233 additions and 238 deletions
|
@ -933,10 +933,9 @@ static void bdrv_test_top_close(BlockDriverState *bs)
|
|||
}
|
||||
}
|
||||
|
||||
static int coroutine_fn bdrv_test_top_co_preadv(BlockDriverState *bs,
|
||||
int64_t offset, int64_t bytes,
|
||||
QEMUIOVector *qiov,
|
||||
BdrvRequestFlags flags)
|
||||
static int coroutine_fn GRAPH_RDLOCK
|
||||
bdrv_test_top_co_preadv(BlockDriverState *bs, int64_t offset, int64_t bytes,
|
||||
QEMUIOVector *qiov, BdrvRequestFlags flags)
|
||||
{
|
||||
BDRVTestTopState *tts = bs->opaque;
|
||||
return bdrv_co_preadv(tts->wait_child, offset, bytes, qiov, flags);
|
||||
|
@ -967,6 +966,8 @@ static void coroutine_fn test_co_delete_by_drain(void *opaque)
|
|||
void *buffer = g_malloc(65536);
|
||||
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buffer, 65536);
|
||||
|
||||
GRAPH_RDLOCK_GUARD();
|
||||
|
||||
/* Pretend some internal write operation from parent to child.
|
||||
* Important: We have to read from the child, not from the parent!
|
||||
* Draining works by first propagating it all up the tree to the
|
||||
|
@ -1698,11 +1699,9 @@ static void bdrv_replace_test_close(BlockDriverState *bs)
|
|||
* Otherwise:
|
||||
* Set .has_read to true and return success.
|
||||
*/
|
||||
static int coroutine_fn bdrv_replace_test_co_preadv(BlockDriverState *bs,
|
||||
int64_t offset,
|
||||
int64_t bytes,
|
||||
QEMUIOVector *qiov,
|
||||
BdrvRequestFlags flags)
|
||||
static int coroutine_fn GRAPH_RDLOCK
|
||||
bdrv_replace_test_co_preadv(BlockDriverState *bs, int64_t offset, int64_t bytes,
|
||||
QEMUIOVector *qiov, BdrvRequestFlags flags)
|
||||
{
|
||||
BDRVReplaceTestState *s = bs->opaque;
|
||||
|
||||
|
@ -1778,7 +1777,10 @@ static void coroutine_fn bdrv_replace_test_read_entry(void *opaque)
|
|||
int ret;
|
||||
|
||||
/* Queue a read request post-drain */
|
||||
bdrv_graph_co_rdlock();
|
||||
ret = bdrv_replace_test_co_preadv(bs, 0, 1, &qiov, 0);
|
||||
bdrv_graph_co_rdunlock();
|
||||
|
||||
g_assert(ret >= 0);
|
||||
bdrv_dec_in_flight(bs);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue