From 6ce7177922a538b653910bde85d4f03fe2a299d7 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Wed, 3 Jan 2018 11:30:21 +0100 Subject: [PATCH 8/9] block/throttle-groups.c: allocate RestartData on the heap RH-Author: Stefan Hajnoczi Message-id: <20180103113021.6954-2-stefanha@redhat.com> Patchwork-id: 78510 O-Subject: [RHV7.5 qemu-kvm-rhev PATCH 1/1] block/throttle-groups.c: allocate RestartData on the heap Bugzilla: 1525868 RH-Acked-by: Paolo Bonzini RH-Acked-by: Fam Zheng RH-Acked-by: Jeffrey Cody From: Manos Pitsidianakis RestartData is the opaque data of the throttle_group_restart_queue_entry coroutine. By being stack allocated, it isn't available anymore if aio_co_enter schedules the coroutine with a bottom half and runs after throttle_group_restart_queue returns. Cc: qemu-stable@nongnu.org Signed-off-by: Manos Pitsidianakis Reviewed-by: Eric Blake Reviewed-by: Alberto Garcia Signed-off-by: Kevin Wolf (cherry picked from commit 43a5dc02fd6070827d5c4ff652b885219fa8cbe1) Signed-off-by: Stefan Hajnoczi Signed-off-by: Miroslav Rezanina --- block/throttle-groups.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/block/throttle-groups.c b/block/throttle-groups.c index 35c22ac..e6ba336 100644 --- a/block/throttle-groups.c +++ b/block/throttle-groups.c @@ -387,17 +387,19 @@ static void coroutine_fn throttle_group_restart_queue_entry(void *opaque) schedule_next_request(tgm, is_write); qemu_mutex_unlock(&tg->lock); } + + g_free(data); } static void throttle_group_restart_queue(ThrottleGroupMember *tgm, bool is_write) { Coroutine *co; - RestartData rd = { - .tgm = tgm, - .is_write = is_write - }; + RestartData *rd = g_new0(RestartData, 1); + + rd->tgm = tgm; + rd->is_write = is_write; - co = qemu_coroutine_create(throttle_group_restart_queue_entry, &rd); + co = qemu_coroutine_create(throttle_group_restart_queue_entry, rd); aio_co_enter(tgm->aio_context, co); } -- 1.8.3.1