[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 01/11] block-copy: add missing coroutine_fn annotations
From: |
Kevin Wolf |
Subject: |
Re: [PATCH v4 01/11] block-copy: add missing coroutine_fn annotations |
Date: |
Fri, 18 Nov 2022 20:05:37 +0100 |
Am 16.11.2022 um 13:22 hat Emanuele Giuseppe Esposito geschrieben:
> These functions end up calling bdrv_common_block_status_above(), a
> generated_co_wrapper function.
> In addition, they also happen to be always called in coroutine context,
> meaning all callers are coroutine_fn.
> This means that the g_c_w function will enter the qemu_in_coroutine()
> case and eventually suspend (or in other words call qemu_coroutine_yield()).
> Therefore we need to mark such functions coroutine_fn too.
>
> Signed-off-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>
Ideally, we'd convert them to new wrappers bdrv_co_is_allocated() and
bdrv_co_block_status_above() instead of having to argue that they always
take the coroutine path in g_c_w.
> diff --git a/block/block-copy.c b/block/block-copy.c
> index bb947afdda..f33ab1d0b6 100644
> --- a/block/block-copy.c
> +++ b/block/block-copy.c
> @@ -669,8 +671,9 @@ void block_copy_reset(BlockCopyState *s, int64_t offset,
> int64_t bytes)
> * @return 0 when the cluster at @offset was unallocated,
> * 1 otherwise, and -ret on error.
> */
> -int64_t block_copy_reset_unallocated(BlockCopyState *s,
> - int64_t offset, int64_t *count)
> +int64_t coroutine_fn block_copy_reset_unallocated(BlockCopyState *s,
> + int64_t offset,
> + int64_t *count)
> {
> int ret;
> int64_t clusters, bytes;
This one is a public function. Its prototype in block-copy.h should be
updated, too.
Kevin
[PATCH v4 10/11] block: convert bdrv_create to generated_co_wrapper_simple, Emanuele Giuseppe Esposito, 2022/11/16
[PATCH v4 09/11] block: bdrv_create_file is a coroutine_fn, Emanuele Giuseppe Esposito, 2022/11/16
[PATCH v4 07/11] block/vmdk: add missing coroutine_fn annotations, Emanuele Giuseppe Esposito, 2022/11/16