Am 24.05.2017 um 21:05 hat Alberto Garcia geschrieben: > On Wed 24 May 2017 06:43:31 PM CEST, Anton Nefedov wrote: > >> + if (m->data_qiov) { > >> + qemu_iovec_reset(&qiov); > >> + qemu_iovec_add(&qiov, start_buffer, start->nb_bytes); > >> + qemu_iovec_concat(&qiov, m->data_qiov, 0, data_bytes); > >> + qemu_iovec_add(&qiov, end_buffer, end->nb_bytes); > > > > Can it be a problem if (m->data_qiov->niov == IOV_MAX)? > > We had to add merge-iovecs code for the case (maybe there's better > > solution?) > > You're right, good catch! I'll add a check for that. To be honest I > don't think that's likely to happen in practice, so if it does we can > simply fall back to the old behavior (separate writes). > > > Also, will this work if allocation is split into several l2metas? > > e.g. one has cow_start.nb_bytes and another has cow_end.nb_bytes > > The guest request will be merged with the first l2meta that has to copy > at least one of the two regions. It doesn't matter if the other one has > nb_bytes == 0.
I think we can improve this later so that we merge everything together (multiple l2metas and guest data) into a single request, but what this seris implements is still a very good first step, so we shouldn't let this stop us from taking the good rather than waiting for the perfect. Kevin