diff options
author | Fam Zheng <famz@redhat.com> | 2015-10-23 11:08:09 +0800 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2015-10-23 18:18:24 +0200 |
commit | 51288d7917e5c5b088985aaa7ff3592561fbc2ba (patch) | |
tree | 53511dc975f9f608dc4cc8e073c81055ba3565b0 /include/block | |
parent | c1e1e5fa8f25f9061b076a05045a6d4950d1a891 (diff) | |
download | qemu-51288d7917e5c5b088985aaa7ff3592561fbc2ba.tar.gz qemu-51288d7917e5c5b088985aaa7ff3592561fbc2ba.tar.bz2 qemu-51288d7917e5c5b088985aaa7ff3592561fbc2ba.zip |
block: Introduce "drained begin/end" API
The semantics is that after bdrv_drained_begin(bs), bs will not get new external
requests until the matching bdrv_drained_end(bs).
Signed-off-by: Fam Zheng <famz@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'include/block')
-rw-r--r-- | include/block/block.h | 19 | ||||
-rw-r--r-- | include/block/block_int.h | 2 |
2 files changed, 21 insertions, 0 deletions
diff --git a/include/block/block.h b/include/block/block.h index 77e91bdc79..610db923d5 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -610,4 +610,23 @@ void bdrv_io_plug(BlockDriverState *bs); void bdrv_io_unplug(BlockDriverState *bs); void bdrv_flush_io_queue(BlockDriverState *bs); +/** + * bdrv_drained_begin: + * + * Begin a quiesced section for exclusive access to the BDS, by disabling + * external request sources including NBD server and device model. Note that + * this doesn't block timers or coroutines from submitting more requests, which + * means block_job_pause is still necessary. + * + * This function can be recursive. + */ +void bdrv_drained_begin(BlockDriverState *bs); + +/** + * bdrv_drained_end: + * + * End a quiescent section started by bdrv_drained_begin(). + */ +void bdrv_drained_end(BlockDriverState *bs); + #endif diff --git a/include/block/block_int.h b/include/block/block_int.h index 7b76eea2d9..3ceeb5a940 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -448,6 +448,8 @@ struct BlockDriverState { /* threshold limit for writes, in bytes. "High water mark". */ uint64_t write_threshold_offset; NotifierWithReturn write_threshold_notifier; + + int quiesce_counter; }; struct BlockBackendRootState { |