Commit b9e413dd authored by Paolo Bonzini's avatar Paolo Bonzini Committed by Stefan Hajnoczi
Browse files

block: explicitly acquire aiocontext in aio callbacks that need it



Reviewed-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Reviewed-by: default avatarFam Zheng <famz@redhat.com>
Reviewed-by: default avatarDaniel P. Berrange <berrange@redhat.com>
Message-id: 20170213135235.12274-16-pbonzini@redhat.com
Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
parent 1919631e
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -310,11 +310,8 @@ static void qemu_archipelago_complete_aio(void *opaque)
{
    AIORequestData *reqdata = (AIORequestData *) opaque;
    ArchipelagoAIOCB *aio_cb = (ArchipelagoAIOCB *) reqdata->aio_cb;
    AioContext *ctx = bdrv_get_aio_context(aio_cb->common.bs);

    aio_context_acquire(ctx);
    aio_cb->common.cb(aio_cb->common.opaque, aio_cb->ret);
    aio_context_release(ctx);
    aio_cb->status = 0;

    qemu_aio_unref(aio_cb);
+0 −7
Original line number Diff line number Diff line
@@ -939,12 +939,9 @@ int blk_make_zero(BlockBackend *blk, BdrvRequestFlags flags)
static void error_callback_bh(void *opaque)
{
    struct BlockBackendAIOCB *acb = opaque;
    AioContext *ctx = bdrv_get_aio_context(acb->common.bs);

    bdrv_dec_in_flight(acb->common.bs);
    aio_context_acquire(ctx);
    acb->common.cb(acb->common.opaque, acb->ret);
    aio_context_release(ctx);
    qemu_aio_unref(acb);
}

@@ -986,12 +983,8 @@ static void blk_aio_complete(BlkAioEmAIOCB *acb)
static void blk_aio_complete_bh(void *opaque)
{
    BlkAioEmAIOCB *acb = opaque;
    AioContext *ctx = bdrv_get_aio_context(acb->common.bs);

    assert(acb->has_returned);
    aio_context_acquire(ctx);
    blk_aio_complete(acb);
    aio_context_release(ctx);
}

static BlockAIOCB *blk_aio_prwv(BlockBackend *blk, int64_t offset, int bytes,
+1 −1
Original line number Diff line number Diff line
@@ -854,11 +854,11 @@ static void curl_readv_bh_cb(void *p)
    curl_multi_socket_action(s->multi, CURL_SOCKET_TIMEOUT, 0, &running);

out:
    aio_context_release(ctx);
    if (ret != -EINPROGRESS) {
        acb->common.cb(acb->common.opaque, ret);
        qemu_aio_unref(acb);
    }
    aio_context_release(ctx);
}

static BlockAIOCB *curl_aio_readv(BlockDriverState *bs,
+1 −5
Original line number Diff line number Diff line
@@ -813,7 +813,7 @@ static void bdrv_co_io_em_complete(void *opaque, int ret)
    CoroutineIOCompletion *co = opaque;

    co->ret = ret;
    qemu_coroutine_enter(co->coroutine);
    aio_co_wake(co->coroutine);
}

static int coroutine_fn bdrv_driver_preadv(BlockDriverState *bs,
@@ -2152,13 +2152,9 @@ static void bdrv_co_complete(BlockAIOCBCoroutine *acb)
static void bdrv_co_em_bh(void *opaque)
{
    BlockAIOCBCoroutine *acb = opaque;
    BlockDriverState *bs = acb->common.bs;
    AioContext *ctx = bdrv_get_aio_context(bs);

    assert(!acb->need_bh);
    aio_context_acquire(ctx);
    bdrv_co_complete(acb);
    aio_context_release(ctx);
}

static void bdrv_co_maybe_schedule_bh(BlockAIOCBCoroutine *acb)
+0 −3
Original line number Diff line number Diff line
@@ -136,16 +136,13 @@ static void
iscsi_bh_cb(void *p)
{
    IscsiAIOCB *acb = p;
    AioContext *ctx = bdrv_get_aio_context(acb->common.bs);

    qemu_bh_delete(acb->bh);

    g_free(acb->buf);
    acb->buf = NULL;

    aio_context_acquire(ctx);
    acb->common.cb(acb->common.opaque, acb->status);
    aio_context_release(ctx);

    if (acb->task != NULL) {
        scsi_free_scsi_task(acb->task);
Loading