On 05/29/2015 04:53 AM, Fam Zheng wrote: > For various purposes, BDS users call bdrv_drain or bdrv_drain_all to make sure > there are no pending requests duringA a series of operations on the BDS. But > in
s/duringA/during/ > the middle of operations, the caller may 1) yield from a coroutine > (mirror_run); > 2) defer the next part of work to a BH (mirror_run); 3) call nested aio_poll > (qmp_transaction); etc.. > > This lock/unlock API is introduced to help assure above complications won't > spoil the purpose of the bdrv_drain(): bdrv_lock should help quiesce other > readers and writers in the beginning of such operations, and bdrv_unlock > should > resume the blocked requests. > > A notifier list is added to allow devices to cooperate with the lock and pause > themselves, for example, by not processing more requests on the NBD export. > > Signed-off-by: Fam Zheng <f...@redhat.com> > --- > block.c | 10 +++++++ > block/io.c | 69 > +++++++++++++++++++++++++++++++++++++++++++++++ > include/block/block.h | 39 +++++++++++++++++++++++++++ > include/block/block_int.h | 5 ++++ > 4 files changed, 123 insertions(+) > I'll leave the technical review on this series to those more familiar with coroutines. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature