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 <el13635@mail.ntua.gr>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
(cherry picked from commit
43a5dc02fd6070827d5c4ff652b885219fa8cbe1)
Conflicts:
block/throttle-groups.c
* reworked to avoid functional dep on
022cdc9, since that involves
refactoring for a feature not present in 2.10
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
schedule_next_request(blk, is_write);
qemu_mutex_unlock(&tg->lock);
}
+
+ g_free(data);
}
static void throttle_group_restart_queue(BlockBackend *blk, bool is_write)
{
Coroutine *co;
- RestartData rd = {
- .blk = blk,
- .is_write = is_write
- };
+ RestartData *rd = g_new0(RestartData, 1);
+
+ rd->blk = blk;
+ 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(blk_get_aio_context(blk), co);
}