Revision c87c0672 block-qcow.c

b/block-qcow.c
530 530
    int n;
531 531
    uint64_t cluster_offset;
532 532
    uint8_t *cluster_data;
533
    struct iovec hd_iov;
534
    QEMUIOVector hd_qiov;
533 535
    BlockDriverAIOCB *hd_aiocb;
534 536
} QCowAIOCB;
535 537

  
......
584 586
    if (!acb->cluster_offset) {
585 587
        if (bs->backing_hd) {
586 588
            /* read from the base image */
587
            acb->hd_aiocb = bdrv_aio_read(bs->backing_hd,
588
                acb->sector_num, acb->buf, acb->n, qcow_aio_read_cb, acb);
589
            acb->hd_iov.iov_base = acb->buf;
590
            acb->hd_iov.iov_len = acb->n * 512;
591
            qemu_iovec_init_external(&acb->hd_qiov, &acb->hd_iov, 1);
592
            acb->hd_aiocb = bdrv_aio_readv(bs->backing_hd, acb->sector_num,
593
                &acb->hd_qiov, acb->n, qcow_aio_read_cb, acb);
589 594
            if (acb->hd_aiocb == NULL)
590 595
                goto fail;
591 596
        } else {
......
605 610
            ret = -EIO;
606 611
            goto fail;
607 612
        }
608
        acb->hd_aiocb = bdrv_aio_read(s->hd,
613
        acb->hd_iov.iov_base = acb->buf;
614
        acb->hd_iov.iov_len = acb->n * 512;
615
        qemu_iovec_init_external(&acb->hd_qiov, &acb->hd_iov, 1);
616
        acb->hd_aiocb = bdrv_aio_readv(s->hd,
609 617
                            (acb->cluster_offset >> 9) + index_in_cluster,
610
                            acb->buf, acb->n, qcow_aio_read_cb, acb);
618
                            &acb->hd_qiov, acb->n, qcow_aio_read_cb, acb);
611 619
        if (acb->hd_aiocb == NULL)
612 620
            goto fail;
613 621
    }
......
687 695
    } else {
688 696
        src_buf = acb->buf;
689 697
    }
690
    acb->hd_aiocb = bdrv_aio_write(s->hd,
691
                                   (cluster_offset >> 9) + index_in_cluster,
692
                                   src_buf, acb->n,
693
                                   qcow_aio_write_cb, acb);
698

  
699
    acb->hd_iov.iov_base = (void *)src_buf;
700
    acb->hd_iov.iov_len = acb->n * 512;
701
    qemu_iovec_init_external(&acb->hd_qiov, &acb->hd_iov, 1);
702
    acb->hd_aiocb = bdrv_aio_writev(s->hd,
703
                                    (cluster_offset >> 9) + index_in_cluster,
704
                                    &acb->hd_qiov, acb->n,
705
                                    qcow_aio_write_cb, acb);
694 706
    if (acb->hd_aiocb == NULL)
695 707
        goto fail;
696 708
}

Also available in: Unified diff