Skip to content

Commit

Permalink
block: access io_limits_disabled with atomic ops
Browse files Browse the repository at this point in the history
Reviewed-by: Stefan Hajnoczi <[email protected]>
Reviewed-by: Alberto Garcia <[email protected]>
Signed-off-by: Paolo Bonzini <[email protected]>
Message-Id: <[email protected]>
Signed-off-by: Fam Zheng <[email protected]>
  • Loading branch information
bonzini authored and Fam Zheng committed Jun 15, 2017
1 parent 414c2ec commit d993b85
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 4 deletions.
4 changes: 2 additions & 2 deletions block/block-backend.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
* 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);
}
}
Expand All @@ -1964,7 +1964,7 @@ static void blk_root_drained_end(BdrvChild *child)
assert(blk->quiesce_counter);

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->dev_ops && blk->dev_ops->drained_end) {
Expand Down
2 changes: 1 addition & 1 deletion block/throttle-groups.c
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ static bool throttle_group_schedule_timer(BlockBackend *blk, bool is_write)
ThrottleGroup *tg = container_of(ts, ThrottleGroup, ts);
bool must_wait;

if (blkp->io_limits_disabled) {
if (atomic_read(&blkp->io_limits_disabled)) {
return false;
}

Expand Down
3 changes: 2 additions & 1 deletion include/sysemu/block-backend.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,8 @@ typedef struct BlockBackendPublic {
CoQueue throttled_reqs[2];

/* 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;

/* The following fields are protected by the ThrottleGroup lock.
Expand Down

0 comments on commit d993b85

Please sign in to comment.