block: access io_limits_disabled with atomic ops
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Alberto Garcia <berto@igalia.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Message-Id: <20170605123908.18777-4-pbonzini@redhat.com> Signed-off-by: Fam Zheng <famz@redhat.com>
This commit is contained in:
parent
414c2ec358
commit
d993b85804
|
@ -1953,7 +1953,7 @@ static void blk_root_drained_begin(BdrvChild *child)
|
||||||
/* Note that blk->root may not be accessible here yet if we are just
|
/* Note that blk->root may not be accessible here yet if we are just
|
||||||
* attaching to a BlockDriverState that is drained. Use child instead. */
|
* attaching to a BlockDriverState that is drained. Use child instead. */
|
||||||
|
|
||||||
if (blk->public.io_limits_disabled++ == 0) {
|
if (atomic_fetch_inc(&blk->public.io_limits_disabled) == 0) {
|
||||||
throttle_group_restart_blk(blk);
|
throttle_group_restart_blk(blk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1964,7 +1964,7 @@ static void blk_root_drained_end(BdrvChild *child)
|
||||||
assert(blk->quiesce_counter);
|
assert(blk->quiesce_counter);
|
||||||
|
|
||||||
assert(blk->public.io_limits_disabled);
|
assert(blk->public.io_limits_disabled);
|
||||||
--blk->public.io_limits_disabled;
|
atomic_dec(&blk->public.io_limits_disabled);
|
||||||
|
|
||||||
if (--blk->quiesce_counter == 0) {
|
if (--blk->quiesce_counter == 0) {
|
||||||
if (blk->dev_ops && blk->dev_ops->drained_end) {
|
if (blk->dev_ops && blk->dev_ops->drained_end) {
|
||||||
|
|
|
@ -240,7 +240,7 @@ static bool throttle_group_schedule_timer(BlockBackend *blk, bool is_write)
|
||||||
ThrottleGroup *tg = container_of(ts, ThrottleGroup, ts);
|
ThrottleGroup *tg = container_of(ts, ThrottleGroup, ts);
|
||||||
bool must_wait;
|
bool must_wait;
|
||||||
|
|
||||||
if (blkp->io_limits_disabled) {
|
if (atomic_read(&blkp->io_limits_disabled)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -80,7 +80,8 @@ typedef struct BlockBackendPublic {
|
||||||
CoQueue throttled_reqs[2];
|
CoQueue throttled_reqs[2];
|
||||||
|
|
||||||
/* Nonzero if the I/O limits are currently being ignored; generally
|
/* Nonzero if the I/O limits are currently being ignored; generally
|
||||||
* it is zero. */
|
* it is zero. Accessed with atomic operations.
|
||||||
|
*/
|
||||||
unsigned int io_limits_disabled;
|
unsigned int io_limits_disabled;
|
||||||
|
|
||||||
/* The following fields are protected by the ThrottleGroup lock.
|
/* The following fields are protected by the ThrottleGroup lock.
|
||||||
|
|
Loading…
Reference in New Issue