[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [PATCH v11 01/19] block: Add bdrv_drain_all_{begin, end
From: |
Kevin Wolf |
Subject: |
Re: [Qemu-block] [PATCH v11 01/19] block: Add bdrv_drain_all_{begin, end}() |
Date: |
Wed, 19 Oct 2016 19:11:20 +0200 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
Am 14.10.2016 um 15:08 hat Alberto Garcia geschrieben:
> bdrv_drain_all() doesn't allow the caller to do anything after all
> pending requests have been completed but before block jobs are
> resumed.
>
> This patch splits bdrv_drain_all() into _begin() and _end() for that
> purpose. It also adds aio_{disable,enable}_external() calls to disable
> external clients in the meantime.
>
> Signed-off-by: Alberto Garcia <address@hidden>
This looks okay as a first step, possibly enough for this series (we'll
have to review this carefully), but it leaves us with a rather limited
version of bdrv_drain_all_begin/end that excludes many useful cases. One
of them is that John wants to use it around QMP transactions.
Specifically, you can't add a new BDS or a new block job in a drain_all
section because then bdrv_drain_all_end() would try to unpause the new
thing even though it has never been paused. Depending on what else we
did with it, this will either corrupt the pause counters or just
directly fail an assertion.
My first thoughts were about how to let an unpause succeed without a
previous pause for these objects, but actually I think this isn't what
we should do. We rather want to actually do the pause instead because
even new BDSes and block jobs should probably start in a quiesced state
when created inside a drain_all section.
This is somewhat similar to attaching a BlockBackend to a drained BDS.
We already take care to immediately quiesce the BB in this case (even
though this isn't very effective because the BB doesn't propagate it
correctly to its users yet...)
Thoughts?
(Paolo, I'm looking at you.)
Kevin
- [Qemu-block] [PATCH v11 00/19] Support streaming to an intermediate layer, Alberto Garcia, 2016/10/14
- [Qemu-block] [PATCH v11 02/19] block: Pause all jobs during bdrv_reopen_multiple(), Alberto Garcia, 2016/10/14
- [Qemu-block] [PATCH v11 01/19] block: Add bdrv_drain_all_{begin, end}(), Alberto Garcia, 2016/10/14
- Re: [Qemu-block] [PATCH v11 01/19] block: Add bdrv_drain_all_{begin, end}(), Paolo Bonzini, 2016/10/15
- Re: [Qemu-block] [PATCH v11 01/19] block: Add bdrv_drain_all_{begin, end}(),
Kevin Wolf <=
- Re: [Qemu-block] [PATCH v11 01/19] block: Add bdrv_drain_all_{begin, end}(), Alberto Garcia, 2016/10/20
- Re: [Qemu-block] [PATCH v11 01/19] block: Add bdrv_drain_all_{begin, end}(), Kevin Wolf, 2016/10/20
- Re: [Qemu-block] [PATCH v11 01/19] block: Add bdrv_drain_all_{begin, end}(), John Snow, 2016/10/21
- Re: [Qemu-block] [PATCH v11 01/19] block: Add bdrv_drain_all_{begin, end}(), Alberto Garcia, 2016/10/21
- Re: [Qemu-block] [Qemu-devel] [PATCH v11 01/19] block: Add bdrv_drain_all_{begin, end}(), John Snow, 2016/10/21
- Re: [Qemu-block] [PATCH v11 01/19] block: Add bdrv_drain_all_{begin, end}(), Paolo Bonzini, 2016/10/24
- Re: [Qemu-block] [PATCH v11 01/19] block: Add bdrv_drain_all_{begin, end}(), Alberto Garcia, 2016/10/25
- Re: [Qemu-block] [PATCH v11 01/19] block: Add bdrv_drain_all_{begin, end}(), Paolo Bonzini, 2016/10/25
- Re: [Qemu-block] [PATCH v11 01/19] block: Add bdrv_drain_all_{begin, end}(), Kevin Wolf, 2016/10/25
- Re: [Qemu-block] [PATCH v11 01/19] block: Add bdrv_drain_all_{begin, end}(), Paolo Bonzini, 2016/10/25