mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 00:33:55 -06:00
throttle: Extract timers from ThrottleState into a separate structure
Group throttling will share ThrottleState between multiple bs. As a consequence the ThrottleState will be accessed by multiple aio context. Timers are tied to their aio context so they must go out of the ThrottleState structure. This commit paves the way for each bs of a common ThrottleState to have its own timer. Signed-off-by: Benoit Canet <benoit.canet@nodalink.com> Signed-off-by: Alberto Garcia <berto@igalia.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Message-id: 6cf9ea96d8b32ae2f8769cead38f68a6a0c8c909.1433779731.git.berto@igalia.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
f4a769abaa
commit
0e5b0a2d54
6 changed files with 135 additions and 94 deletions
11
block.c
11
block.c
|
@ -1825,6 +1825,9 @@ static void bdrv_move_feature_fields(BlockDriverState *bs_dest,
|
|||
memcpy(&bs_dest->throttle_state,
|
||||
&bs_src->throttle_state,
|
||||
sizeof(ThrottleState));
|
||||
memcpy(&bs_dest->throttle_timers,
|
||||
&bs_src->throttle_timers,
|
||||
sizeof(ThrottleTimers));
|
||||
bs_dest->throttled_reqs[0] = bs_src->throttled_reqs[0];
|
||||
bs_dest->throttled_reqs[1] = bs_src->throttled_reqs[1];
|
||||
bs_dest->io_limits_enabled = bs_src->io_limits_enabled;
|
||||
|
@ -1886,7 +1889,7 @@ void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old)
|
|||
assert(QLIST_EMPTY(&bs_new->dirty_bitmaps));
|
||||
assert(bs_new->job == NULL);
|
||||
assert(bs_new->io_limits_enabled == false);
|
||||
assert(!throttle_have_timer(&bs_new->throttle_state));
|
||||
assert(!throttle_timers_are_initialized(&bs_new->throttle_timers));
|
||||
|
||||
tmp = *bs_new;
|
||||
*bs_new = *bs_old;
|
||||
|
@ -1903,7 +1906,7 @@ void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old)
|
|||
/* Check a few fields that should remain attached to the device */
|
||||
assert(bs_new->job == NULL);
|
||||
assert(bs_new->io_limits_enabled == false);
|
||||
assert(!throttle_have_timer(&bs_new->throttle_state));
|
||||
assert(!throttle_timers_are_initialized(&bs_new->throttle_timers));
|
||||
|
||||
/* insert the nodes back into the graph node list if needed */
|
||||
if (bs_new->node_name[0] != '\0') {
|
||||
|
@ -3691,7 +3694,7 @@ void bdrv_detach_aio_context(BlockDriverState *bs)
|
|||
}
|
||||
|
||||
if (bs->io_limits_enabled) {
|
||||
throttle_detach_aio_context(&bs->throttle_state);
|
||||
throttle_timers_detach_aio_context(&bs->throttle_timers);
|
||||
}
|
||||
if (bs->drv->bdrv_detach_aio_context) {
|
||||
bs->drv->bdrv_detach_aio_context(bs);
|
||||
|
@ -3727,7 +3730,7 @@ void bdrv_attach_aio_context(BlockDriverState *bs,
|
|||
bs->drv->bdrv_attach_aio_context(bs, new_context);
|
||||
}
|
||||
if (bs->io_limits_enabled) {
|
||||
throttle_attach_aio_context(&bs->throttle_state, new_context);
|
||||
throttle_timers_attach_aio_context(&bs->throttle_timers, new_context);
|
||||
}
|
||||
|
||||
QLIST_FOREACH(ban, &bs->aio_notifiers, list) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue