Re: [PATCH 6/8] block: add missing coroutine_fn annotations
"Denis V. Lunev" <[email protected]>
| Newsgroups | org.xenproject.lists.xen-devel,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
On 7/20/26 09:55, Marc-André Lureau wrote: > The functions call coroutine functions or are called by coroutine. > > Add an assert() in qcow2_do_close() code path which calls a > no_coroutine_fn bdrv_graph_wrlock_drained(). > > Signed-off-by: Marc-André Lureau <[email protected]> > --- > include/block/blockjob_int.h | 2 +- > block/crypto.c | 13 +++++++------ > block/io.c | 8 +++++--- > block/parallels.c | 5 +++-- > block/qcow2.c | 11 +++++++---- > blockjob.c | 3 ++- > 6 files changed, 25 insertions(+), 17 deletions(-) > > diff --git a/include/block/blockjob_int.h b/include/block/blockjob_int.h > index 4c3d2e25a20..34e172874fa 100644 > --- a/include/block/blockjob_int.h > +++ b/include/block/blockjob_int.h > @@ -150,7 +150,7 @@ void block_job_ratelimit_processed_bytes(BlockJob *job, uint64_t n); > * Put the job to sleep (assuming that it wasn't canceled) to throttle it to the > * right speed according to its rate limiting. > */ > -void block_job_ratelimit_sleep(BlockJob *job); > +void coroutine_fn block_job_ratelimit_sleep(BlockJob *job); > > /** > * block_job_error_action: > diff --git a/block/crypto.c b/block/crypto.c > index 36abb7af468..8a34d92fded 100644 > --- a/block/crypto.c > +++ b/block/crypto.c > @@ -56,12 +56,13 @@ static int block_crypto_probe_generic(QCryptoBlockFormat format, > } > > > -static int block_crypto_read_func(QCryptoBlock *block, > - size_t offset, > - uint8_t *buf, > - size_t buflen, > - void *opaque, > - Error **errp) > +static int coroutine_mixed_fn > +block_crypto_read_func(QCryptoBlock *block, > + size_t offset, > + uint8_t *buf, > + size_t buflen, > + void *opaque, > + Error **errp) > { > BlockDriverState *bs = opaque; > BlockCrypto *crypto = bs->opaque; > diff --git a/block/io.c b/block/io.c > index a916b236c3c..99dd16864a3 100644 > --- a/block/io.c > +++ b/block/io.c > @@ -346,8 +346,9 @@ static void coroutine_fn bdrv_co_yield_to_drain(BlockDriverState *bs, > assert(data.done); > } > > -static void bdrv_do_drained_begin(BlockDriverState *bs, BdrvChild *parent, > - bool poll) > +static void coroutine_mixed_fn > +bdrv_do_drained_begin(BlockDriverState *bs, BdrvChild *parent, > + bool poll) > { > IO_OR_GS_CODE(); > > @@ -397,7 +398,8 @@ bdrv_drained_begin(BlockDriverState *bs) > * This function does not poll, nor must any of its recursively called > * functions. > */ > -static void bdrv_do_drained_end(BlockDriverState *bs, BdrvChild *parent) > +static void coroutine_mixed_fn > +bdrv_do_drained_end(BlockDriverState *bs, BdrvChild *parent) > { > IO_OR_GS_CODE(); > > diff --git a/block/parallels.c b/block/parallels.c > index 7a90fb5220b..46a6e8f2743 100644 > --- a/block/parallels.c > +++ b/block/parallels.c > @@ -142,8 +142,9 @@ static uint32_t host_cluster_index(BDRVParallelsState *s, int64_t off) > return off / s->cluster_size; > } > > -static int64_t block_status(BDRVParallelsState *s, int64_t sector_num, > - int nb_sectors, int *pnum) > +static int64_t coroutine_fn > +block_status(BDRVParallelsState *s, int64_t sector_num, > + int nb_sectors, int *pnum) > { > int64_t start_off = -2, prev_end_off = -2; > > diff --git a/block/qcow2.c b/block/qcow2.c > index 19271b10a49..161626fa3cb 100644 > --- a/block/qcow2.c > +++ b/block/qcow2.c > @@ -1287,9 +1287,10 @@ fail: > } > > /* s_locked specifies whether s->lock is held or not */ > -static void qcow2_update_options_commit(BlockDriverState *bs, > - Qcow2ReopenState *r, > - bool s_locked) > +static void coroutine_fn > +qcow2_update_options_commit(BlockDriverState *bs, > + Qcow2ReopenState *r, > + bool s_locked) > { > BDRVQcow2State *s = bs->opaque; > int i; > @@ -2126,7 +2127,8 @@ fail: > return ret; > } > > -static void qcow2_reopen_commit(BDRVReopenState *state) > +static void coroutine_fn > +qcow2_reopen_commit(BDRVReopenState *state) > { > BDRVQcow2State *s = state->bs->opaque; > > @@ -2905,6 +2907,7 @@ qcow2_do_close(BlockDriverState *bs, bool close_data_file) > g_free(s->image_backing_format); > > if (close_data_file && has_data_file(bs)) { > + assert(!qemu_in_coroutine()); > GLOBAL_STATE_CODE(); > bdrv_graph_rdunlock_main_loop(); > bdrv_graph_wrlock_drained(); > diff --git a/blockjob.c b/blockjob.c > index f3b11cc7a19..f3ad6a93125 100644 > --- a/blockjob.c > +++ b/blockjob.c > @@ -338,7 +338,8 @@ void block_job_ratelimit_processed_bytes(BlockJob *job, uint64_t n) > ratelimit_calculate_delay(&job->limit, n); > } > > -void block_job_ratelimit_sleep(BlockJob *job) > +void coroutine_fn > +block_job_ratelimit_sleep(BlockJob *job) > { > uint64_t delay_ns; > > Reviewed-by: Denis V. Lunev <[email protected]> (parallels part)