mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-29 05:13:54 -06:00
block: plug whole tree at once, introduce bdrv_io_unplugged_begin/end
Extract the handling of io_plug "depth" from linux-aio.c and let the main bdrv_drain loop do nothing but wait on I/O. Like the two newly introduced functions, bdrv_io_plug and bdrv_io_unplug now operate on all children. The visit order is now symmetrical between plug and unplug, making it possible for formats to implement plug/unplug. Reviewed-by: Fam Zheng <famz@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Acked-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
ce0f141259
commit
6b98bd6495
6 changed files with 71 additions and 44 deletions
|
@ -294,7 +294,6 @@ struct BlockDriver {
|
|||
/* io queue for linux-aio */
|
||||
void (*bdrv_io_plug)(BlockDriverState *bs);
|
||||
void (*bdrv_io_unplug)(BlockDriverState *bs);
|
||||
void (*bdrv_flush_io_queue)(BlockDriverState *bs);
|
||||
|
||||
/**
|
||||
* Try to get @bs's logical and physical block size.
|
||||
|
@ -484,6 +483,10 @@ struct BlockDriverState {
|
|||
uint64_t write_threshold_offset;
|
||||
NotifierWithReturn write_threshold_notifier;
|
||||
|
||||
/* counters for nested bdrv_io_plug and bdrv_io_unplugged_begin */
|
||||
unsigned io_plugged;
|
||||
unsigned io_plug_disabled;
|
||||
|
||||
int quiesce_counter;
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue