On Wed, Jul 2, 2014 at 12:56 AM, Paolo Bonzini <pbonz...@redhat.com> wrote: > Il 01/07/2014 17:21, Kevin Wolf ha scritto: > >>>>> Does this bs->file forwarding work for more than the raw driver? For >>>>> example, if drv is an image format driver that needs to read some >>>>> metadata from the image before it can submit the payload, does this >>>>> still do what you were intending? >>> >>> >>> Sorry for not understanding the problem, and you are right, these >>> patches can't support other formats, and for solving the dependency, >>> changes to image format driver should be needed. >> >> >> Then let's drop the bs->file recursion here and add an explicit >> .bdrv_io_plug/unplug callback to the raw driver. > > > Actually I thought about this in my review, and there's no reason for this > not to work for image formats. > > While bs->file is plugged, image formats will start executing their > bdrv_co_readv/bdrv_co_writev callbacks, and issue reads or writes as > necessary. The reads and writes will accumulate in bs->file until it is > unplugged, which is exactly the effect we want.
For some image formats, meta data need to be read first before the payload can be read since how/what to read payload might depend on content of meta data. > > The change in bdrv_drain_all is ugly though. I don't have a better idea, > but I would like to understand better why it is needed. Ming Lei, did you > see a deadlock without it? Not yet, just for safe reason to make sure all queued data has chance to be flushed. If you think it isn't necessary, I can remove it. Thanks, -- Ming Lei