Am 22.10.2015 um 08:32 hat Fam Zheng geschrieben: > The "need_check_timer" is used to clear the "NEED_CHECK" flag in the > image header after a grace period once metadata update has finished. In > compliance to the bdrv_drain semantics we should make sure it remains > deleted once .bdrv_drain is called. > > We cannot reuse qed_need_check_timer_cb because it calls bdrv_aio_flush > with a completion callback that starts more I/O, bdrv_drain cannot cope > with this.
For the record: I discussed this with Fam on IRC and we came to the conclusion that we should instead fix bdrv_drain() to correctly drain in-flight flushes. In order to achieve this, Fam will send a series that adds a BdrvTrackedRequest to all remaining asynchronous operations. So far we have identified flush, discard and aio_ioctl. At the same time he will send a rebased version of this series that goes back to asynchronous flushing in bdrv_qed_drain(). > Also the assertions in qed_need_check_timer_cb and > qed_unplug_allocating_write_reqs are not guaranteed in the case of > bdrv_qed_drain. > > Signed-off-by: Fam Zheng <f...@redhat.com> Kevin