From: Hanna Czenczek Date: Mon, 10 Nov 2025 15:48:52 +0000 (+0100) Subject: iscsi: Create AIO BH in original AioContext X-Git-Tag: v10.2.0-rc1~5^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=63d15c7aa5c82b3bebcaf4be3802f6949657f41c;p=thirdparty%2Fqemu.git iscsi: Create AIO BH in original AioContext AIO callbacks must be called in the original request’s AioContext, regardless of the BDS’s “main” AioContext. Signed-off-by: Hanna Czenczek Message-ID: <20251110154854.151484-18-hreitz@redhat.com> Reviewed-by: Kevin Wolf Signed-off-by: Kevin Wolf --- diff --git a/block/iscsi.c b/block/iscsi.c index 852ecccf0d..7d6bf185ea 100644 --- a/block/iscsi.c +++ b/block/iscsi.c @@ -119,6 +119,7 @@ typedef struct IscsiTask { typedef struct IscsiAIOCB { BlockAIOCB common; + AioContext *ctx; QEMUBH *bh; IscsiLun *iscsilun; struct scsi_task *task; @@ -173,7 +174,7 @@ iscsi_schedule_bh(IscsiAIOCB *acb) if (acb->bh) { return; } - acb->bh = aio_bh_new(acb->iscsilun->aio_context, iscsi_bh_cb, acb); + acb->bh = aio_bh_new(acb->ctx, iscsi_bh_cb, acb); qemu_bh_schedule(acb->bh); } @@ -1012,8 +1013,7 @@ static void iscsi_ioctl_handle_emulated(IscsiAIOCB *acb, int req, void *buf) ret = -EINVAL; } assert(!acb->bh); - acb->bh = aio_bh_new(bdrv_get_aio_context(bs), - iscsi_ioctl_bh_completion, acb); + acb->bh = aio_bh_new(acb->ctx, iscsi_ioctl_bh_completion, acb); acb->ret = ret; qemu_bh_schedule(acb->bh); } @@ -1030,6 +1030,7 @@ static BlockAIOCB *iscsi_aio_ioctl(BlockDriverState *bs, acb = qemu_aio_get(&iscsi_aiocb_info, bs, cb, opaque); acb->iscsilun = iscsilun; + acb->ctx = qemu_get_current_aio_context(); acb->bh = NULL; acb->status = -EINPROGRESS; acb->ioh = buf;