On Wed, Dec 23, 2015 at 06:15:20PM +0800, Fam Zheng wrote: > On Fri, 12/18 14:15, Markus Armbruster wrote: > In that theory, all other block job types, mirror/stream/commit, fit into a > "pull" model, which follows a specified dirty bitmap and copies data from a > specified src BDS. In this pull model, > > mirror (device=d0 target=d1) becomes a pull fileter: > > BB[d0] BB[d1] > | | > throttle [pull,src=d0] > | | > detect-zero detect-zero > | | > copy-on-read copy-on-read > | | > BDS BDS > > Note: the pull reuses most of the block/mirror.c code except the > s->dirty_bitmap will be initialized depending on the block job type. In the > case of mirror, it is trivially the same as now. I don't understand the pull filter. Is there also a mirror block job coroutine? Does anything perform I/O to BB[d1]? If nothing is writing to/reading from BB[d1], then I don't understand the purpose of the pull filter. Stefan