Revision c87c0672 block-qcow2.c
b/block-qcow2.c | ||
---|---|---|
1270 | 1270 |
uint64_t cluster_offset; |
1271 | 1271 |
uint8_t *cluster_data; |
1272 | 1272 |
BlockDriverAIOCB *hd_aiocb; |
1273 |
struct iovec hd_iov; |
|
1274 |
QEMUIOVector hd_qiov; |
|
1273 | 1275 |
QEMUBH *bh; |
1274 | 1276 |
QCowL2Meta l2meta; |
1275 | 1277 |
} QCowAIOCB; |
... | ... | |
1347 | 1349 |
n1 = backing_read1(bs->backing_hd, acb->sector_num, |
1348 | 1350 |
acb->buf, acb->n); |
1349 | 1351 |
if (n1 > 0) { |
1350 |
acb->hd_aiocb = bdrv_aio_read(bs->backing_hd, acb->sector_num, |
|
1351 |
acb->buf, acb->n, qcow_aio_read_cb, acb); |
|
1352 |
acb->hd_iov.iov_base = acb->buf; |
|
1353 |
acb->hd_iov.iov_len = acb->n * 512; |
|
1354 |
qemu_iovec_init_external(&acb->hd_qiov, &acb->hd_iov, 1); |
|
1355 |
acb->hd_aiocb = bdrv_aio_readv(bs->backing_hd, acb->sector_num, |
|
1356 |
&acb->hd_qiov, acb->n, |
|
1357 |
qcow_aio_read_cb, acb); |
|
1352 | 1358 |
if (acb->hd_aiocb == NULL) |
1353 | 1359 |
goto fail; |
1354 | 1360 |
} else { |
... | ... | |
1377 | 1383 |
ret = -EIO; |
1378 | 1384 |
goto fail; |
1379 | 1385 |
} |
1380 |
acb->hd_aiocb = bdrv_aio_read(s->hd, |
|
1386 |
|
|
1387 |
acb->hd_iov.iov_base = acb->buf; |
|
1388 |
acb->hd_iov.iov_len = acb->n * 512; |
|
1389 |
qemu_iovec_init_external(&acb->hd_qiov, &acb->hd_iov, 1); |
|
1390 |
acb->hd_aiocb = bdrv_aio_readv(s->hd, |
|
1381 | 1391 |
(acb->cluster_offset >> 9) + index_in_cluster, |
1382 |
acb->buf, acb->n, qcow_aio_read_cb, acb);
|
|
1392 |
&acb->hd_qiov, acb->n, qcow_aio_read_cb, acb);
|
|
1383 | 1393 |
if (acb->hd_aiocb == NULL) |
1384 | 1394 |
goto fail; |
1385 | 1395 |
} |
... | ... | |
1476 | 1486 |
} else { |
1477 | 1487 |
src_buf = acb->buf; |
1478 | 1488 |
} |
1479 |
acb->hd_aiocb = bdrv_aio_write(s->hd, |
|
1480 |
(acb->cluster_offset >> 9) + index_in_cluster, |
|
1481 |
src_buf, acb->n, |
|
1482 |
qcow_aio_write_cb, acb); |
|
1489 |
acb->hd_iov.iov_base = (void *)src_buf; |
|
1490 |
acb->hd_iov.iov_len = acb->n * 512; |
|
1491 |
qemu_iovec_init_external(&acb->hd_qiov, &acb->hd_iov, 1); |
|
1492 |
acb->hd_aiocb = bdrv_aio_writev(s->hd, |
|
1493 |
(acb->cluster_offset >> 9) + index_in_cluster, |
|
1494 |
&acb->hd_qiov, acb->n, |
|
1495 |
qcow_aio_write_cb, acb); |
|
1483 | 1496 |
if (acb->hd_aiocb == NULL) |
1484 | 1497 |
goto fail; |
1485 | 1498 |
} |
Also available in: Unified diff