summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaolo Bonzini2017-06-05 14:38:51 +0200
committerFam Zheng2017-06-16 01:55:00 +0200
commit414c2ec3585408a5c7b458664db180e91480bb03 (patch)
treeb03c368b9cfec715824ed64ed83e48ee1b68d0b5
parentblock: access copy_on_read with atomic ops (diff)
downloadqemu-414c2ec3585408a5c7b458664db180e91480bb03.tar.gz
qemu-414c2ec3585408a5c7b458664db180e91480bb03.tar.xz
qemu-414c2ec3585408a5c7b458664db180e91480bb03.zip
block: access quiesce_counter 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-3-pbonzini@redhat.com> Signed-off-by: Fam Zheng <famz@redhat.com>
-rw-r--r--block/io.c4
-rw-r--r--include/block/block_int.h1
2 files changed, 3 insertions, 2 deletions
diff --git a/block/io.c b/block/io.c
index 98c690f306..70643df494 100644
--- a/block/io.c
+++ b/block/io.c
@@ -241,7 +241,7 @@ void bdrv_drained_begin(BlockDriverState *bs)
return;
}
- if (!bs->quiesce_counter++) {
+ if (atomic_fetch_inc(&bs->quiesce_counter) == 0) {
aio_disable_external(bdrv_get_aio_context(bs));
bdrv_parent_drained_begin(bs);
}
@@ -252,7 +252,7 @@ void bdrv_drained_begin(BlockDriverState *bs)
void bdrv_drained_end(BlockDriverState *bs)
{
assert(bs->quiesce_counter > 0);
- if (--bs->quiesce_counter > 0) {
+ if (atomic_fetch_dec(&bs->quiesce_counter) > 1) {
return;
}
diff --git a/include/block/block_int.h b/include/block/block_int.h
index 49f2ebb95a..1824e0e135 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -637,6 +637,7 @@ struct BlockDriverState {
/* do we need to tell the quest if we have a volatile write cache? */
int enable_write_cache;
+ /* Accessed with atomic ops. */
int quiesce_counter;
};