On Thu, Mar 05, 2026 at 10:24:50PM +0800, Zhang Chen wrote:
> Update the usage of "iothread_get_aio_context()".
> 
> Signed-off-by: Zhang Chen <[email protected]>
> ---
>  blockdev.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/blockdev.c b/blockdev.c
> index 6e86c6262f..01ccf64b3f 100644
> --- a/blockdev.c
> +++ b/blockdev.c
> @@ -3683,7 +3683,14 @@ void qmp_x_blockdev_set_iothread(const char 
> *node_name, StrOrNull *iothread,
>              goto out;
>          }
>  
> -        new_context = iothread_get_aio_context(obj);
> +        char *path = object_get_canonical_path(OBJECT(bs));

CCing Kevin and Markus in case they have an opinion on this.

BlockDriverState is not a QOM Object so using OBJECT(bs) is undefined
behavior and may crash.

node_name is unique across block driver graph nodes and could be used.
Unfortunately it's not connected to the QOM Object hierarchy. Maybe it's
best to build a holder name that is an invalid QOM path so there can be
no collisions between QOM paths and block driver graph nodes.

  g_autofree char *holder = g_strdup_printf("BlockDriverState %s", node_name);

(A cleaner long-term solution would be making BlockDriverStates QOM
Objects so they have a proper path.)

> +        /*
> +         * For this qmp case, hard to find the point put aio context ???
> +         * It looks like a pairing function is needed:
> +         * qmp_x_blockdev_del_iothread()
> +         */
> +        new_context = iothread_get_aio_context(obj, path);
> +        g_free(path);

Who calls iothread_put_aio_context()?

Attachment: signature.asc
Description: PGP signature

Reply via email to