> > +    /* Fix cluster_ending_nr if we are at risk of reading outside the image
> > +     * (Cluster unaligned image size)
> > +     */
> > +    max_cluster_ending_nr = bs->total_sectors - first_sector_after_qiov;
> > +    cluster_ending_nr = max_cluster_ending_nr < (uint64_t) 
> > cluster_ending_nr ?
> > +                        (int) max_cluster_ending_nr : cluster_ending_nr;
> 
> Is there a test case for the cluster unaligned image size scenario?

I discovered this case using qemu-io-tests one of the test case trigger this.

> > +    iov.iov_len = nb_sectors * BDRV_SECTOR_SIZE;
> > +    iov.iov_base = data;
> > +    qemu_iovec_init_external(&qiov, &iov, 1);
> > +    qemu_co_mutex_unlock(&s->lock);
> > +    ret = bdrv_co_readv(bs, sector_num, nb_sectors, &qiov);
> 
> This function should be marked coroutine_fn - it may only be called from
> inside a coroutine.  It's good to mark all coroutine functions so the
> reader knows immediately this will run in coroutine context.
> 
> bdrv_co_readv() is does I/O throttling.  This is wrong here since we
> don't want to charge for internal I/O.
Should I use qcow2_co_readv to bypass the I/O throttling ?

Benoît

Reply via email to