block: Drop bdrv_ioctl_bh_cb
Similar to the "!drv || !drv->bdrv_aio_ioctl" case above, here it is okay to set co.ret and return. As pointed out by Paolo, a BH will be created as necessary by the caller (bdrv_co_maybe_schedule_bh). Besides, as pointed out by Kevin, "data" was leaked before. Reported-by: Kevin Wolf <kwolf@redhat.com> Reported-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Fam Zheng <famz@redhat.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Message-id: 20160601015223.19277-1-famz@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
41574268b7
commit
c8a9fd8071
20
block/io.c
20
block/io.c
|
@ -2327,19 +2327,6 @@ int bdrv_discard(BlockDriverState *bs, int64_t sector_num, int nb_sectors)
|
||||||
return rwco.ret;
|
return rwco.ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
CoroutineIOCompletion *co;
|
|
||||||
QEMUBH *bh;
|
|
||||||
} BdrvIoctlCompletionData;
|
|
||||||
|
|
||||||
static void bdrv_ioctl_bh_cb(void *opaque)
|
|
||||||
{
|
|
||||||
BdrvIoctlCompletionData *data = opaque;
|
|
||||||
|
|
||||||
bdrv_co_io_em_complete(data->co, -ENOTSUP);
|
|
||||||
qemu_bh_delete(data->bh);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int bdrv_co_do_ioctl(BlockDriverState *bs, int req, void *buf)
|
static int bdrv_co_do_ioctl(BlockDriverState *bs, int req, void *buf)
|
||||||
{
|
{
|
||||||
BlockDriver *drv = bs->drv;
|
BlockDriver *drv = bs->drv;
|
||||||
|
@ -2357,11 +2344,8 @@ static int bdrv_co_do_ioctl(BlockDriverState *bs, int req, void *buf)
|
||||||
|
|
||||||
acb = drv->bdrv_aio_ioctl(bs, req, buf, bdrv_co_io_em_complete, &co);
|
acb = drv->bdrv_aio_ioctl(bs, req, buf, bdrv_co_io_em_complete, &co);
|
||||||
if (!acb) {
|
if (!acb) {
|
||||||
BdrvIoctlCompletionData *data = g_new(BdrvIoctlCompletionData, 1);
|
co.ret = -ENOTSUP;
|
||||||
data->bh = aio_bh_new(bdrv_get_aio_context(bs),
|
goto out;
|
||||||
bdrv_ioctl_bh_cb, data);
|
|
||||||
data->co = &co;
|
|
||||||
qemu_bh_schedule(data->bh);
|
|
||||||
}
|
}
|
||||||
qemu_coroutine_yield();
|
qemu_coroutine_yield();
|
||||||
out:
|
out:
|
||||||
|
|
Loading…
Reference in New Issue