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