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