virtio-blk: extract cleanup_iothread_vq_mapping() function

This is the cleanup function that must be called after
apply_iothread_vq_mapping() succeeds. virtio-scsi will need this
function too, so extract it.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Message-ID: <20250311132616.1049687-9-stefanha@redhat.com>
Tested-by: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Stefan Hajnoczi 2025-03-11 21:26:11 +08:00 committed by Kevin Wolf
parent da6eebb33b
commit 366b5811d6

View File

@ -1495,6 +1495,9 @@ validate_iothread_vq_mapping_list(IOThreadVirtQueueMappingList *list,
* Fill in the AioContext for each virtqueue in the @vq_aio_context array given
* the iothread-vq-mapping parameter in @iothread_vq_mapping_list.
*
* cleanup_iothread_vq_mapping() must be called to free IOThread object
* references after this function returns success.
*
* Returns: %true on success, %false on failure.
**/
static bool apply_iothread_vq_mapping(
@ -1545,6 +1548,23 @@ static bool apply_iothread_vq_mapping(
return true;
}
/**
* cleanup_iothread_vq_mapping:
* @list: The mapping of virtqueues to IOThreads.
*
* Release IOThread object references that were acquired by
* apply_iothread_vq_mapping().
*/
static void cleanup_iothread_vq_mapping(IOThreadVirtQueueMappingList *list)
{
IOThreadVirtQueueMappingList *node;
for (node = list; node; node = node->next) {
IOThread *iothread = iothread_by_id(node->value->iothread);
object_unref(OBJECT(iothread));
}
}
/* Context: BQL held */
static bool virtio_blk_vq_aio_context_init(VirtIOBlock *s, Error **errp)
{
@ -1611,12 +1631,7 @@ static void virtio_blk_vq_aio_context_cleanup(VirtIOBlock *s)
assert(!s->ioeventfd_started);
if (conf->iothread_vq_mapping_list) {
IOThreadVirtQueueMappingList *node;
for (node = conf->iothread_vq_mapping_list; node; node = node->next) {
IOThread *iothread = iothread_by_id(node->value->iothread);
object_unref(OBJECT(iothread));
}
cleanup_iothread_vq_mapping(conf->iothread_vq_mapping_list);
}
if (conf->iothread) {