Skip to content

Commit

Permalink
block/throttle-groups.c: allocate RestartData on the heap
Browse files Browse the repository at this point in the history
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 43a5dc0)
 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>
  • Loading branch information
epilys authored and mdroth committed Sep 28, 2017
1 parent 33a5996 commit 7496699
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions block/throttle-groups.c
Expand Up @@ -392,17 +392,19 @@ static void coroutine_fn throttle_group_restart_queue_entry(void *opaque)
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);
}

Expand Down

0 comments on commit 7496699

Please sign in to comment.