Commit 4de659e8 authored by Paolo Bonzini's avatar Paolo Bonzini Committed by Kevin Wolf
Browse files

vdi: merge aio_read_cb and aio_write_cb into callers



Now inline the former AIO callbacks into vdi_co_readv and vdi_co_writev.
While many cleanups are possible, the code now really looks synchronous.

Acked-by: default avatarStefan Weil <sw@weilnetz.de>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
parent 0c7bfc32
Loading
Loading
Loading
Loading
+12 −28
Original line number Diff line number Diff line
@@ -523,15 +523,19 @@ static VdiAIOCB *vdi_aio_setup(BlockDriverState *bs, int64_t sector_num,
    return acb;
}

static int vdi_aio_read_cb(void *opaque, int ret)
static int vdi_co_readv(BlockDriverState *bs,
        int64_t sector_num, int nb_sectors, QEMUIOVector *qiov)
{
    VdiAIOCB *acb = opaque;
    BlockDriverState *bs = acb->common.bs;
    VdiAIOCB *acb;
    BDRVVdiState *s = bs->opaque;
    uint32_t bmap_entry;
    uint32_t block_index;
    uint32_t sector_in_block;
    uint32_t n_sectors;
    int ret;

    logout("\n");
    acb = vdi_aio_setup(bs, sector_num, qiov, nb_sectors, 0);

restart:
    block_index = acb->sector_num / s->block_sectors;
@@ -578,27 +582,19 @@ restart:
    return ret;
}

static int vdi_co_readv(BlockDriverState *bs,
static int vdi_co_writev(BlockDriverState *bs,
        int64_t sector_num, int nb_sectors, QEMUIOVector *qiov)
{
    VdiAIOCB *acb;
    int ret;

    logout("\n");
    acb = vdi_aio_setup(bs, sector_num, qiov, nb_sectors, 0);
    ret = vdi_aio_read_cb(acb, 0);
    return ret;
}

static int vdi_aio_write_cb(void *opaque, int ret)
{
    VdiAIOCB *acb = opaque;
    BlockDriverState *bs = acb->common.bs;
    BDRVVdiState *s = bs->opaque;
    uint32_t bmap_entry;
    uint32_t block_index;
    uint32_t sector_in_block;
    uint32_t n_sectors;
    int ret;

    logout("\n");
    acb = vdi_aio_setup(bs, sector_num, qiov, nb_sectors, 1);

restart:
    block_index = acb->sector_num / s->block_sectors;
@@ -710,18 +706,6 @@ restart:
    return ret;
}

static int vdi_co_writev(BlockDriverState *bs,
        int64_t sector_num, int nb_sectors, QEMUIOVector *qiov)
{
    VdiAIOCB *acb;
    int ret;

    logout("\n");
    acb = vdi_aio_setup(bs, sector_num, qiov, nb_sectors, 1);
    ret = vdi_aio_write_cb(acb, 0);
    return ret;
}

static int vdi_create(const char *filename, QEMUOptionParameter *options)
{
    int fd;